107262024-04-10 19:49:22111Útvonalakcpp17Időlimit túllépés 45/1001.082s69016 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)->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)->unordered_map<int,int>{
		unordered_map<int,int>s;
		for(int x:q[i]){
			s[x]=0;
		}
		for(int j:c[i]){
			if(j==p){
				continue;
			}
			unordered_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();
						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]+cc[j].size();
						t.erase(x);
					}
					else{
						t[x]=0;
					}
				}
			}
			for(auto[x,y]:t){
				if(s.count(x)){
					ans[x]=s[x]+y+cc[j].size();
					s.erase(x);
				}
				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
1Elfogadva3ms1828 KiB
2Elfogadva193ms44472 KiB
subtask215/15
3Elfogadva4ms2872 KiB
4Elfogadva4ms3452 KiB
5Elfogadva8ms6176 KiB
6Elfogadva14ms6944 KiB
7Elfogadva75ms23636 KiB
8Elfogadva162ms44880 KiB
subtask30/15
9Elfogadva4ms3468 KiB
10Elfogadva4ms4056 KiB
11Elfogadva75ms6744 KiB
12Elfogadva16ms8056 KiB
13Elfogadva93ms28828 KiB
14Elfogadva209ms54424 KiB
15Időlimit túllépés1.069s54576 KiB
subtask415/15
16Elfogadva4ms4676 KiB
17Elfogadva8ms5584 KiB
18Elfogadva14ms8188 KiB
19Elfogadva79ms24884 KiB
20Elfogadva171ms46252 KiB
subtask515/15
21Elfogadva3ms3964 KiB
22Elfogadva3ms4060 KiB
23Elfogadva4ms4980 KiB
24Elfogadva3ms4160 KiB
25Elfogadva4ms4636 KiB
26Elfogadva4ms4848 KiB
subtask60/40
27Elfogadva3ms4368 KiB
28Elfogadva170ms46644 KiB
29Elfogadva4ms2872 KiB
30Elfogadva4ms3452 KiB
31Elfogadva8ms6176 KiB
32Elfogadva14ms6944 KiB
33Elfogadva75ms23636 KiB
34Elfogadva162ms44880 KiB
35Elfogadva4ms3468 KiB
36Elfogadva4ms4056 KiB
37Elfogadva75ms6744 KiB
38Elfogadva16ms8056 KiB
39Elfogadva93ms28828 KiB
40Elfogadva209ms54424 KiB
41Időlimit túllépés1.069s54576 KiB
42Elfogadva4ms4676 KiB
43Elfogadva8ms5584 KiB
44Elfogadva14ms8188 KiB
45Elfogadva79ms24884 KiB
46Elfogadva171ms46252 KiB
47Elfogadva3ms3964 KiB
48Elfogadva3ms4060 KiB
49Elfogadva4ms4980 KiB
50Elfogadva3ms4160 KiB
51Elfogadva4ms4636 KiB
52Elfogadva4ms4848 KiB
53Időlimit túllépés1.077s49476 KiB
54Elfogadva6ms5328 KiB
55Elfogadva209ms8724 KiB
56Elfogadva19ms8908 KiB
57Elfogadva118ms28092 KiB
58Elfogadva105ms29240 KiB
59Időlimit túllépés1.082s69016 KiB
60Elfogadva256ms51612 KiB
61Elfogadva263ms52544 KiB
62Elfogadva252ms53152 KiB