10728 2024. 04. 10 19:52:36 111 Útvonalak cpp17 Hibás válasz 0/100 384ms 137120 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+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;
					}
				}
			}
			if(s.size()<t.size()){
				swap(s,t);
			}
			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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Hibás válasz 3ms 1828 KiB
2 Hibás válasz 168ms 44444 KiB
subtask2 0/15
3 Elfogadva 4ms 2828 KiB
4 Hibás válasz 4ms 3524 KiB
5 Hibás válasz 7ms 6428 KiB
6 Elfogadva 14ms 6976 KiB
7 Elfogadva 75ms 23652 KiB
8 Hibás válasz 178ms 44672 KiB
subtask3 0/15
9 Hibás válasz 4ms 3392 KiB
10 Hibás válasz 4ms 3984 KiB
11 Hibás válasz 8ms 6604 KiB
12 Hibás válasz 14ms 7692 KiB
13 Hibás válasz 78ms 28100 KiB
14 Hibás válasz 199ms 53600 KiB
15 Hibás válasz 317ms 113340 KiB
subtask4 0/15
16 Hibás válasz 6ms 4556 KiB
17 Hibás válasz 8ms 5424 KiB
18 Hibás válasz 16ms 8228 KiB
19 Hibás válasz 82ms 24988 KiB
20 Hibás válasz 172ms 46424 KiB
subtask5 0/15
21 Elfogadva 3ms 4496 KiB
22 Hibás válasz 3ms 4628 KiB
23 Hibás válasz 4ms 5616 KiB
24 Hibás válasz 3ms 4776 KiB
25 Hibás válasz 4ms 5016 KiB
26 Hibás válasz 4ms 5124 KiB
subtask6 0/40
27 Hibás válasz 3ms 4684 KiB
28 Hibás válasz 189ms 46840 KiB
29 Elfogadva 4ms 2828 KiB
30 Hibás válasz 4ms 3524 KiB
31 Hibás válasz 7ms 6428 KiB
32 Elfogadva 14ms 6976 KiB
33 Elfogadva 75ms 23652 KiB
34 Hibás válasz 178ms 44672 KiB
35 Hibás válasz 4ms 3392 KiB
36 Hibás válasz 4ms 3984 KiB
37 Hibás válasz 8ms 6604 KiB
38 Hibás válasz 14ms 7692 KiB
39 Hibás válasz 78ms 28100 KiB
40 Hibás válasz 199ms 53600 KiB
41 Hibás válasz 317ms 113340 KiB
42 Hibás válasz 6ms 4556 KiB
43 Hibás válasz 8ms 5424 KiB
44 Hibás válasz 16ms 8228 KiB
45 Hibás válasz 82ms 24988 KiB
46 Hibás válasz 172ms 46424 KiB
47 Elfogadva 3ms 4496 KiB
48 Hibás válasz 3ms 4628 KiB
49 Hibás válasz 4ms 5616 KiB
50 Hibás válasz 3ms 4776 KiB
51 Hibás válasz 4ms 5016 KiB
52 Hibás válasz 4ms 5124 KiB
53 Hibás válasz 314ms 115764 KiB
54 Hibás válasz 6ms 5440 KiB
55 Hibás válasz 8ms 8720 KiB
56 Elfogadva 19ms 9000 KiB
57 Hibás válasz 116ms 28268 KiB
58 Hibás válasz 97ms 29436 KiB
59 Hibás válasz 384ms 137120 KiB
60 Hibás válasz 252ms 51776 KiB
61 Hibás válasz 241ms 52640 KiB
62 Hibás válasz 275ms 53044 KiB