10148 2024. 03. 28 17:03:04 111 Turista járatok cpp17 Futási hiba 0/100 131ms 66900 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(z.begin()+1,z.end(),1)<<'\n';
	for(int i=1;i<=N;i++){
		if(z[i]){
			cout<<i<<' ';
		}
	}
	cout<<'\n';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Futási hiba 3ms 2104 KiB
2 Futási hiba 9ms 7100 KiB
subtask2 0/10
3 Futási hiba 3ms 2444 KiB
4 Futási hiba 3ms 2588 KiB
5 Futási hiba 3ms 2692 KiB
6 Futási hiba 2ms 2640 KiB
7 Futási hiba 3ms 2912 KiB
subtask3 0/10
8 Futási hiba 3ms 3012 KiB
9 Elfogadva 2ms 3012 KiB
10 Elfogadva 3ms 3044 KiB
11 Elfogadva 3ms 3268 KiB
12 Elfogadva 6ms 5052 KiB
subtask4 0/10
13 Elfogadva 8ms 6952 KiB
14 Futási hiba 3ms 3104 KiB
15 Futási hiba 3ms 3784 KiB
16 Futási hiba 4ms 4168 KiB
17 Futási hiba 131ms 66272 KiB
18 Futási hiba 41ms 24640 KiB
19 Futási hiba 59ms 30184 KiB
20 Futási hiba 45ms 24896 KiB
subtask5 0/10
21 Futási hiba 9ms 8492 KiB
22 Futási hiba 3ms 4068 KiB
23 Futási hiba 3ms 3968 KiB
24 Futási hiba 3ms 4024 KiB
25 Futási hiba 82ms 45180 KiB
26 Futási hiba 8ms 7228 KiB
27 Futási hiba 8ms 7240 KiB
subtask6 0/60
28 Futási hiba 3ms 4264 KiB
29 Futási hiba 3ms 4564 KiB
30 Futási hiba 4ms 5028 KiB
31 Futási hiba 4ms 5524 KiB
32 Futási hiba 6ms 6000 KiB
33 Futási hiba 6ms 6564 KiB
34 Futási hiba 9ms 8976 KiB
35 Futási hiba 8ms 8984 KiB
36 Futási hiba 9ms 9120 KiB
37 Futási hiba 131ms 66900 KiB
38 Futási hiba 41ms 25176 KiB
39 Futási hiba 43ms 25176 KiB
40 Futási hiba 41ms 25212 KiB
41 Futási hiba 41ms 25160 KiB
42 Futási hiba 41ms 25332 KiB
43 Futási hiba 41ms 25328 KiB
44 Futási hiba 41ms 25224 KiB
45 Futási hiba 61ms 30868 KiB
46 Futási hiba 43ms 25220 KiB
47 Futási hiba 45ms 25476 KiB
48 Futási hiba 41ms 25544 KiB
49 Futási hiba 43ms 25400 KiB
50 Futási hiba 43ms 25416 KiB