107322024-04-10 20:21:32111Útvonalakcpp17Elfogadva 100/100397ms142520 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1832 KiB
2Elfogadva190ms44496 KiB
subtask215/15
3Elfogadva4ms2748 KiB
4Elfogadva4ms3464 KiB
5Elfogadva7ms6232 KiB
6Elfogadva14ms7140 KiB
7Elfogadva79ms23972 KiB
8Elfogadva163ms45212 KiB
subtask315/15
9Elfogadva4ms3900 KiB
10Elfogadva4ms4636 KiB
11Elfogadva8ms7432 KiB
12Elfogadva14ms8244 KiB
13Elfogadva79ms28396 KiB
14Elfogadva173ms54312 KiB
15Elfogadva321ms116884 KiB
subtask415/15
16Elfogadva6ms5180 KiB
17Elfogadva8ms5948 KiB
18Elfogadva14ms8744 KiB
19Elfogadva82ms25316 KiB
20Elfogadva188ms46572 KiB
subtask515/15
21Elfogadva3ms4496 KiB
22Elfogadva3ms4404 KiB
23Elfogadva4ms5500 KiB
24Elfogadva3ms4660 KiB
25Elfogadva4ms5068 KiB
26Elfogadva4ms5180 KiB
subtask640/40
27Elfogadva3ms4796 KiB
28Elfogadva171ms47068 KiB
29Elfogadva4ms2748 KiB
30Elfogadva4ms3464 KiB
31Elfogadva7ms6232 KiB
32Elfogadva14ms7140 KiB
33Elfogadva79ms23972 KiB
34Elfogadva163ms45212 KiB
35Elfogadva4ms3900 KiB
36Elfogadva4ms4636 KiB
37Elfogadva8ms7432 KiB
38Elfogadva14ms8244 KiB
39Elfogadva79ms28396 KiB
40Elfogadva173ms54312 KiB
41Elfogadva321ms116884 KiB
42Elfogadva6ms5180 KiB
43Elfogadva8ms5948 KiB
44Elfogadva14ms8744 KiB
45Elfogadva82ms25316 KiB
46Elfogadva188ms46572 KiB
47Elfogadva3ms4496 KiB
48Elfogadva3ms4404 KiB
49Elfogadva4ms5500 KiB
50Elfogadva3ms4660 KiB
51Elfogadva4ms5068 KiB
52Elfogadva4ms5180 KiB
53Elfogadva324ms120048 KiB
54Elfogadva6ms5828 KiB
55Elfogadva8ms9380 KiB
56Elfogadva19ms9420 KiB
57Elfogadva116ms28812 KiB
58Elfogadva103ms29980 KiB
59Elfogadva397ms142520 KiB
60Elfogadva233ms52288 KiB
61Elfogadva256ms53196 KiB
62Elfogadva264ms53716 KiB