107292024-04-10 19:55:31111Útvonalakcpp17Hibás válasz 0/100381ms137656 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>{
		if(!a[i]){
			exit(1);
		}
		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;
						t.erase(x);
					}
					else{
						t[x]=y+cc[j].size()-1;
					}
				}
			}
			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;
						t.erase(x);
					}
					else{
						t[x]=cc[j].size()-1;
					}
				}
			}
			if(s.size()<t.size()){
				swap(s,t);
			}
			for(auto[x,y]:t){
				if(s.count(x)){
					ans[x]=s[x]+y+1;
					s.erase(x);
				}
				else{
					s[x]=y;
				}
			}
		}
		return s;
	};
	dfs2(dfs2,1,-1);
	for(int i:ans){
		cout<<i-2<<'\n';
	}
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Hibás válasz3ms1828 KiB
2Hibás válasz171ms44432 KiB
subtask20/15
3Hibás válasz4ms2840 KiB
4Hibás válasz4ms3448 KiB
5Hibás válasz7ms6272 KiB
6Elfogadva14ms7328 KiB
7Hibás válasz75ms24040 KiB
8Hibás válasz180ms45092 KiB
subtask30/15
9Hibás válasz4ms3564 KiB
10Hibás válasz4ms4176 KiB
11Hibás válasz8ms6868 KiB
12Hibás válasz14ms7832 KiB
13Hibás válasz86ms28208 KiB
14Hibás válasz199ms53972 KiB
15Hibás válasz381ms113624 KiB
subtask40/15
16Hibás válasz4ms4792 KiB
17Hibás válasz8ms5684 KiB
18Hibás válasz14ms8548 KiB
19Hibás válasz83ms25180 KiB
20Hibás válasz194ms46412 KiB
subtask50/15
21Hibás válasz3ms4236 KiB
22Hibás válasz3ms4516 KiB
23Hibás válasz4ms5484 KiB
24Hibás válasz3ms4840 KiB
25Hibás válasz4ms5268 KiB
26Hibás válasz4ms5276 KiB
subtask60/40
27Hibás válasz3ms5028 KiB
28Hibás válasz189ms47396 KiB
29Hibás válasz4ms2840 KiB
30Hibás válasz4ms3448 KiB
31Hibás válasz7ms6272 KiB
32Elfogadva14ms7328 KiB
33Hibás válasz75ms24040 KiB
34Hibás válasz180ms45092 KiB
35Hibás válasz4ms3564 KiB
36Hibás válasz4ms4176 KiB
37Hibás válasz8ms6868 KiB
38Hibás válasz14ms7832 KiB
39Hibás válasz86ms28208 KiB
40Hibás válasz199ms53972 KiB
41Hibás válasz381ms113624 KiB
42Hibás válasz4ms4792 KiB
43Hibás válasz8ms5684 KiB
44Hibás válasz14ms8548 KiB
45Hibás válasz83ms25180 KiB
46Hibás válasz194ms46412 KiB
47Hibás válasz3ms4236 KiB
48Hibás válasz3ms4516 KiB
49Hibás válasz4ms5484 KiB
50Hibás válasz3ms4840 KiB
51Hibás válasz4ms5268 KiB
52Hibás válasz4ms5276 KiB
53Hibás válasz316ms116416 KiB
54Hibás válasz6ms6164 KiB
55Hibás válasz8ms9476 KiB
56Hibás válasz20ms9620 KiB
57Hibás válasz112ms28884 KiB
58Hibás válasz103ms30092 KiB
59Hibás válasz319ms137656 KiB
60Hibás válasz250ms52276 KiB
61Hibás válasz257ms53196 KiB
62Hibás válasz266ms53676 KiB