101482024-03-28 17:03:04111Turista járatokcpp17Futási hiba 0/100131ms66900 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Futási hiba3ms2104 KiB
2Futási hiba9ms7100 KiB
subtask20/10
3Futási hiba3ms2444 KiB
4Futási hiba3ms2588 KiB
5Futási hiba3ms2692 KiB
6Futási hiba2ms2640 KiB
7Futási hiba3ms2912 KiB
subtask30/10
8Futási hiba3ms3012 KiB
9Elfogadva2ms3012 KiB
10Elfogadva3ms3044 KiB
11Elfogadva3ms3268 KiB
12Elfogadva6ms5052 KiB
subtask40/10
13Elfogadva8ms6952 KiB
14Futási hiba3ms3104 KiB
15Futási hiba3ms3784 KiB
16Futási hiba4ms4168 KiB
17Futási hiba131ms66272 KiB
18Futási hiba41ms24640 KiB
19Futási hiba59ms30184 KiB
20Futási hiba45ms24896 KiB
subtask50/10
21Futási hiba9ms8492 KiB
22Futási hiba3ms4068 KiB
23Futási hiba3ms3968 KiB
24Futási hiba3ms4024 KiB
25Futási hiba82ms45180 KiB
26Futási hiba8ms7228 KiB
27Futási hiba8ms7240 KiB
subtask60/60
28Futási hiba3ms4264 KiB
29Futási hiba3ms4564 KiB
30Futási hiba4ms5028 KiB
31Futási hiba4ms5524 KiB
32Futási hiba6ms6000 KiB
33Futási hiba6ms6564 KiB
34Futási hiba9ms8976 KiB
35Futási hiba8ms8984 KiB
36Futási hiba9ms9120 KiB
37Futási hiba131ms66900 KiB
38Futási hiba41ms25176 KiB
39Futási hiba43ms25176 KiB
40Futási hiba41ms25212 KiB
41Futási hiba41ms25160 KiB
42Futási hiba41ms25332 KiB
43Futási hiba41ms25328 KiB
44Futási hiba41ms25224 KiB
45Futási hiba61ms30868 KiB
46Futási hiba43ms25220 KiB
47Futási hiba45ms25476 KiB
48Futási hiba41ms25544 KiB
49Futási hiba43ms25400 KiB
50Futási hiba43ms25416 KiB