10732 2024. 04. 10 20:21:32 111 Útvonalak cpp17 Elfogadva 100/100 397ms 142520 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
#ifdef CB
	freopen("be1.txt","r",stdin);
//	freopen("ki.txt","w",stdout);
#endif
	int N,M,K;
	cin>>N>>M>>K;
	vector<vector<int>>g(N+1);
	for(int i=0;i<M;i++){
		int a,b;
		cin>>a>>b;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	vector<int>v(N+1),w(N+1),p(N+1),a(N+1);
	vector<vector<int>>c(N+1),cc;
	auto dfs=[&](auto self,int i)->unordered_set<int>{
		unordered_set<int>s;
		w[i]=v[i];
		for(int j:g[i]){
			if(j==p[i]){
				continue;
			}
			if(v[j]){
				if(v[j]<v[i]){
					w[i]=min(w[i],v[j]);
				}
				continue;
			}
			v[j]=v[i]+1;
			p[j]=i;
			auto z=self(self,j);
			if(w[j]>=v[i]){
				a[i]=1;
				z.insert(i);
				for(int k:z){
					c[k].push_back(cc.size());
				}
				cc.emplace_back(z.begin(),z.end());
			}
			else{
				w[i]=min(w[i],w[j]);
				if(s.size()<z.size()){
					swap(s,z);
				}
				s.insert(z.begin(),z.end());
			}
		}
		s.insert(i);
		return s;
	};
	v[1]=1;
	dfs(dfs,1);
	vector<vector<int>>q(N+1);
	for(int i=0;i<K;i++){
		int a,b;
		cin>>a>>b;
		q[a].push_back(i);
		q[b].push_back(i);
	}
	vector<int>ans(K,-1);
	auto dfs2=[&](auto self,int i,int p,int d)->unordered_map<int,int>{
		unordered_map<int,int>s;
		for(int x:q[i]){
			s[x]=d;
		}
		for(int j:c[i]){
			if(j==p){
				continue;
			}
			int dd=d+cc[j].size()-1;
			unordered_map<int,int>t;
			for(int k:cc[j]){
				if(k==i||!a[k]){
					continue;
				}
				auto z=self(self,k,j,dd);
				if(t.size()<z.size()){
					swap(t,z);
				}
				for(auto[x,y]:z){
					if(t.count(x)){
						ans[x]=t[x]+y+cc[j].size()-dd*2;
						t.erase(x);
					}
					else{
						t[x]=y;
					}
				}
			}
			for(int k:cc[j]){
				if(k==i||a[k]){
					continue;
				}
				for(int x:q[k]){
					if(t.count(x)){
						ans[x]=t[x]+1-d;
						t.erase(x);
					}
					else{
						t[x]=dd;
					}
				}
			}
			if(s.size()<t.size()){
				swap(s,t);
			}
			for(auto[x,y]:t){
				if(s.count(x)){
					ans[x]=s[x]+y+1-d*2;
					s.erase(x);
				}
				else{
					s[x]=y;
				}
			}
		}
		return s;
	};
	dfs2(dfs2,1,-1,0);
	for(int i:ans){
		cout<<i-2<<'\n';
	}
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1832 KiB
2 Elfogadva 190ms 44496 KiB
subtask2 15/15
3 Elfogadva 4ms 2748 KiB
4 Elfogadva 4ms 3464 KiB
5 Elfogadva 7ms 6232 KiB
6 Elfogadva 14ms 7140 KiB
7 Elfogadva 79ms 23972 KiB
8 Elfogadva 163ms 45212 KiB
subtask3 15/15
9 Elfogadva 4ms 3900 KiB
10 Elfogadva 4ms 4636 KiB
11 Elfogadva 8ms 7432 KiB
12 Elfogadva 14ms 8244 KiB
13 Elfogadva 79ms 28396 KiB
14 Elfogadva 173ms 54312 KiB
15 Elfogadva 321ms 116884 KiB
subtask4 15/15
16 Elfogadva 6ms 5180 KiB
17 Elfogadva 8ms 5948 KiB
18 Elfogadva 14ms 8744 KiB
19 Elfogadva 82ms 25316 KiB
20 Elfogadva 188ms 46572 KiB
subtask5 15/15
21 Elfogadva 3ms 4496 KiB
22 Elfogadva 3ms 4404 KiB
23 Elfogadva 4ms 5500 KiB
24 Elfogadva 3ms 4660 KiB
25 Elfogadva 4ms 5068 KiB
26 Elfogadva 4ms 5180 KiB
subtask6 40/40
27 Elfogadva 3ms 4796 KiB
28 Elfogadva 171ms 47068 KiB
29 Elfogadva 4ms 2748 KiB
30 Elfogadva 4ms 3464 KiB
31 Elfogadva 7ms 6232 KiB
32 Elfogadva 14ms 7140 KiB
33 Elfogadva 79ms 23972 KiB
34 Elfogadva 163ms 45212 KiB
35 Elfogadva 4ms 3900 KiB
36 Elfogadva 4ms 4636 KiB
37 Elfogadva 8ms 7432 KiB
38 Elfogadva 14ms 8244 KiB
39 Elfogadva 79ms 28396 KiB
40 Elfogadva 173ms 54312 KiB
41 Elfogadva 321ms 116884 KiB
42 Elfogadva 6ms 5180 KiB
43 Elfogadva 8ms 5948 KiB
44 Elfogadva 14ms 8744 KiB
45 Elfogadva 82ms 25316 KiB
46 Elfogadva 188ms 46572 KiB
47 Elfogadva 3ms 4496 KiB
48 Elfogadva 3ms 4404 KiB
49 Elfogadva 4ms 5500 KiB
50 Elfogadva 3ms 4660 KiB
51 Elfogadva 4ms 5068 KiB
52 Elfogadva 4ms 5180 KiB
53 Elfogadva 324ms 120048 KiB
54 Elfogadva 6ms 5828 KiB
55 Elfogadva 8ms 9380 KiB
56 Elfogadva 19ms 9420 KiB
57 Elfogadva 116ms 28812 KiB
58 Elfogadva 103ms 29980 KiB
59 Elfogadva 397ms 142520 KiB
60 Elfogadva 233ms 52288 KiB
61 Elfogadva 256ms 53196 KiB
62 Elfogadva 264ms 53716 KiB