10147 2024. 03. 28 17:01:45 111 Turista járatok cpp17 Futási hiba 0/100 140ms 67604 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N,M,K;
	cin>>N>>M>>K;
	vector<vector<int>>g(N+1),t(N+1);
	vector<pair<int,int>>e;
	for(int i=0;i<M;i++){
		int a,b;
		cin>>a>>b;
		if(i<K){
			t[a].push_back(b);
			t[b].push_back(a);
			e.emplace_back(a,b);
			e.emplace_back(b,a);
		}
		else{
			g[a].push_back(b);
			g[b].push_back(a);
		}
	}
	if(0){
start:
		int TREE=1;
		N=2+rand()%10,M=TREE?N-1:rand()%min(N*(N-1)/2,N*2),K=M==0?0:rand()%M;
		struct DSU {
			vector<int> v;

			DSU(int n) : v(n + 1, -1) {
			}

			int find(int a) {
				return v[a] < 0 ? a : v[a] = find(v[a]);
			}

			void unite(int a, int b) {
				a = find(a);
				b = find(b);
				if (a == b) {
					return;
				}
				if (v[a] > v[b]) {
					swap(a, b);
				}
				v[a] += v[b];
				v[b] = a;
			}
		};
		DSU dsu(N+1);
		g.clear();
		g.resize(N+1);
		t.clear();
		t.resize(N+1);
		e.clear();
		set<pair<int,int>>s;
		for(int i=0;i<M;i++){
			int a,b;
			do{
				a=1+rand()%N,b=1+rand()%N;
			}
			while(a==b||s.count({a,b})||(TREE&&dsu.find(a)==dsu.find(b)));
			s.insert({a,b});
			s.insert({b,a});
			dsu.unite(a,b);
			if(i<K){
				t[a].push_back(b);
				t[b].push_back(a);
				e.emplace_back(a,b);
				e.emplace_back(b,a);
			}
			else{
				g[a].push_back(b);
				g[b].push_back(a);
			}
		}
	}
	vector<vector<pair<int,int>>>gg(N+1);
	for(int i=1;i<=N;i++){
		for(int j:g[i]){
			gg[i].emplace_back(j,0);
		}
		for(int j:t[i]){
			gg[i].emplace_back(j,1);
		}
	}
#define g gg
	vector<int>v(N+1),w(N+1),u(N+1),z(N+1),p(N+1);
	auto dfs=[&](auto self,int i)->void{
		w[i]=i;
		for(auto[j,b]:g[i]){
			if(j==p[i]){
				continue;
			}
			if(v[j]){
				exit(2);
				if(v[j]<v[w[i]]){
					w[i]=j;
				}
				continue;
			}
			v[j]=v[i]+1;
			p[j]=i;
			self(self,j);
			if(v[w[j]]<v[w[i]]){
				w[i]=w[j];
			}
			if(b){
				u[j]=1;
			}
		}
	};
	v[1]=1;
	dfs(dfs,1);
	auto dfs2=[&](auto self,int i,int b)->void{
		z[i]|=b;
		for(auto[j,x]:g[i]){
			if(v[j]&&p[j]!=i){
				continue;
			}
			v[j]=v[i]+1;
			p[j]=i;
			self(self,j,b|u[j]);
		}
	};
	dfs2(dfs2,1,0);
#undef g
	if(0){
		int st=clock();
		vector<int>ans;
		for(int i=1;i<=N;i++){
			if(z[i])ans.push_back(i);
		}
		vector<int>ans1;
		{
			vector<int>v(N+1),u(N+1);
			auto bt=[&](auto self,int i,int b)->void{
				if(clock()>st+CLOCKS_PER_SEC/10){
					return;
				}
				if(v[i]){
					return;
				}
				if(b){
					u[i]=1;
				}
				v[i]=1;
				for(int j:g[i]){
					self(self,j,b);
				}
				for(int j:t[i]){
					self(self,j,1);
				}
				v[i]=0;
			};
			bt(bt,1,0);
			if(clock()>st+CLOCKS_PER_SEC/10){
				cout<<"TIMEOUT"<<endl;
				goto start;
			}
			for(int i=1;i<=N;i++){
				if(u[i]){
					ans1.push_back(i);
				}
			}
		}
		if(ans1.size()!=ans.size()){
			cout<<"============= INPUT ============="<<endl;
			cout<<N<<" "<<M<<" "<<K<<endl;
			for(int i=1;i<=N;i++){
				for(int j:t[i]){
					if(j<i)continue;
					cout<<i<<' '<<j<<' '<<endl;
				}
			}
			for(int i=1;i<=N;i++){
				for(int j:g[i]){
					if(j<i)continue;
					cout<<i<<' '<<j<<endl;
				}
			}
			cout<<"============= NODES ============="<<endl;
			for(int i=1;i<=N;i++){
				cout<<setw(3)<<i<<" L "<<v[i]<<" D "<<w[i]<<" P "<<p[i]<<endl;
			}
			cout<<"============= EDGES ============="<<endl;
			for(int i=1;i<=N;i++){
				for(int j:g[i]){
					if(j<i)continue;
					cout<<i<<' '<<j<<' '<<0+(p[j]==i||p[i]==j?min(v[i],v[j]):0)<<endl;
				}
				for(int j:t[i]){
					if(j<i)continue;
					cout<<i<<' '<<j<<' '<<100+(p[j]==i||p[i]==j?min(v[i],v[j]):0)<<endl;
				}
			}
			cout<<"============= GOT ============="<<endl;
			cout<<ans.size()<<'\n';
			for(int i:ans){
				cout<<i<<' ';
			}
			cout<<'\n';
			cout<<"============= EXP ============="<<endl;
			cout<<ans1.size()<<'\n';
			for(int i:ans1){
				cout<<i<<' ';
			}
			cout<<'\n';
			exit(1);
		}
		static int cc=0;
		cout<<"OK "<<setw(9)<<cc++<<" "<<ans.size()<<endl;
		goto start;
	}
	cout<<count(u.begin()+1,u.end(),1)<<'\n';
	for(int i=1;i<=N;i++){
		if(u[i]){
			cout<<i<<' ';
		}
	}
	cout<<'\n';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Futási hiba 3ms 1832 KiB
2 Futási hiba 9ms 6872 KiB
subtask2 0/10
3 Futási hiba 3ms 2112 KiB
4 Futási hiba 2ms 2112 KiB
5 Futási hiba 3ms 2240 KiB
6 Futási hiba 3ms 2596 KiB
7 Futási hiba 3ms 2688 KiB
subtask3 0/10
8 Futási hiba 3ms 2944 KiB
9 Hibás válasz 3ms 2984 KiB
10 Hibás válasz 3ms 3068 KiB
11 Hibás válasz 3ms 3676 KiB
12 Hibás válasz 6ms 5420 KiB
subtask4 0/10
13 Hibás válasz 8ms 7656 KiB
14 Futási hiba 3ms 4008 KiB
15 Futási hiba 3ms 4688 KiB
16 Futási hiba 4ms 5152 KiB
17 Futási hiba 140ms 67196 KiB
18 Futási hiba 43ms 25544 KiB
19 Futási hiba 61ms 31024 KiB
20 Futási hiba 43ms 25484 KiB
subtask5 0/10
21 Futási hiba 9ms 9480 KiB
22 Futási hiba 3ms 4988 KiB
23 Futási hiba 3ms 5064 KiB
24 Futási hiba 3ms 5104 KiB
25 Futási hiba 85ms 45872 KiB
26 Futási hiba 8ms 8152 KiB
27 Futási hiba 8ms 8236 KiB
subtask6 0/60
28 Futási hiba 3ms 5132 KiB
29 Futási hiba 3ms 5232 KiB
30 Futási hiba 4ms 5496 KiB
31 Futási hiba 4ms 6120 KiB
32 Futási hiba 6ms 6752 KiB
33 Futási hiba 6ms 7320 KiB
34 Futási hiba 9ms 9800 KiB
35 Futási hiba 9ms 9804 KiB
36 Futási hiba 9ms 9660 KiB
37 Futási hiba 140ms 67604 KiB
38 Futási hiba 43ms 25820 KiB
39 Futási hiba 43ms 25860 KiB
40 Futási hiba 43ms 25888 KiB
41 Futási hiba 45ms 25756 KiB
42 Futási hiba 43ms 25788 KiB
43 Futási hiba 43ms 25804 KiB
44 Futási hiba 43ms 25820 KiB
45 Futási hiba 61ms 31428 KiB
46 Futási hiba 43ms 25828 KiB
47 Futási hiba 41ms 26008 KiB
48 Futási hiba 43ms 26092 KiB
49 Futási hiba 45ms 25916 KiB
50 Futási hiba 43ms 25868 KiB