107252024-04-10 19:47:39111Útvonalakcpp17Időlimit túllépés 45/1001.082s73552 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("be2.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)->set<int>{
		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)->map<int,int>{
		map<int,int>s;
		for(int x:q[i]){
			s[x]=0;
		}
		for(int j:c[i]){
			if(j==p){
				continue;
			}
			map<int,int>t;
			for(int k:cc[j]){
				if(k==i||!a[k]){
					continue;
				}
				auto z=self(self,k,j);
				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();
					}
					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]+cc[j].size();
					}
					else{
						t[x]=0;
					}
				}
			}
			for(auto[x,y]:t){
				if(s.count(x)){
					ans[x]=s[x]+y+cc[j].size();
				}
				else{
					s[x]=y+cc[j].size()-1;
				}
			}
		}
		return s;
	};
	dfs2(dfs2,1,-1);
	for(int i:ans){
		cout<<i-2<<'\n';
	}
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2040 KiB
2Elfogadva194ms47540 KiB
subtask215/15
3Elfogadva4ms2808 KiB
4Elfogadva4ms3524 KiB
5Elfogadva7ms6548 KiB
6Elfogadva14ms7148 KiB
7Elfogadva82ms25248 KiB
8Elfogadva177ms48032 KiB
subtask30/15
9Elfogadva4ms3768 KiB
10Elfogadva4ms4488 KiB
11Elfogadva71ms7456 KiB
12Elfogadva17ms8664 KiB
13Elfogadva104ms30492 KiB
14Elfogadva261ms57248 KiB
15Időlimit túllépés1.07s54828 KiB
subtask415/15
16Elfogadva6ms4944 KiB
17Elfogadva8ms5624 KiB
18Elfogadva16ms8120 KiB
19Elfogadva93ms26728 KiB
20Elfogadva193ms49492 KiB
subtask515/15
21Elfogadva3ms4276 KiB
22Elfogadva3ms4160 KiB
23Elfogadva6ms5148 KiB
24Elfogadva3ms4308 KiB
25Elfogadva4ms4652 KiB
26Elfogadva4ms4668 KiB
subtask60/40
27Elfogadva3ms4116 KiB
28Elfogadva194ms49380 KiB
29Elfogadva4ms2808 KiB
30Elfogadva4ms3524 KiB
31Elfogadva7ms6548 KiB
32Elfogadva14ms7148 KiB
33Elfogadva82ms25248 KiB
34Elfogadva177ms48032 KiB
35Elfogadva4ms3768 KiB
36Elfogadva4ms4488 KiB
37Elfogadva71ms7456 KiB
38Elfogadva17ms8664 KiB
39Elfogadva104ms30492 KiB
40Elfogadva261ms57248 KiB
41Időlimit túllépés1.07s54828 KiB
42Elfogadva6ms4944 KiB
43Elfogadva8ms5624 KiB
44Elfogadva16ms8120 KiB
45Elfogadva93ms26728 KiB
46Elfogadva193ms49492 KiB
47Elfogadva3ms4276 KiB
48Elfogadva3ms4160 KiB
49Elfogadva6ms5148 KiB
50Elfogadva3ms4308 KiB
51Elfogadva4ms4652 KiB
52Elfogadva4ms4668 KiB
53Időlimit túllépés1.054s47724 KiB
54Elfogadva6ms5152 KiB
55Elfogadva225ms8424 KiB
56Elfogadva29ms11072 KiB
57Elfogadva180ms38040 KiB
58Elfogadva119ms30928 KiB
59Időlimit túllépés1.082s69084 KiB
60Elfogadva375ms71736 KiB
61Elfogadva398ms72612 KiB
62Elfogadva412ms73552 KiB