179842025-09-24 18:22:40algoproTestnevelés óracpp17Elfogadva 50/50231ms19964 KiB
// UUID: 9a884aed-f60d-4a0c-a6bc-75ea601c61da
#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> graph;
vector<bool> been;
vector<int> solution;

void dfs(int node){
	been[node]=true;
	for(int next:graph[node]){
		if(!been[next]) dfs(next);
	}
	solution.push_back(node);
}


int main() {
	int N,K;
	cin >> N >> K;
	graph.resize(N+1);

	for(int i=0; i<K; i++){
		int a,b;
		cin >> a >> b;
		graph[a].push_back(b);
	}

	been.resize(N+1,false);

	for(int i=1; i<=N; i++){
		if(!been[i]) dfs(i);
	}

	been.assign(N+1,false);
	bool check;
	bool AtLeastTwo=false;
	int SwapIndex=-1;
	int i=0;
	reverse(solution.begin(),solution.end());
	
	for(int place:solution){
		check=false;
		been[place]=true;
		for(int u:graph[place]){
			if(been[u]) {cout << 0; return 0;}
			if(i < N && u == solution[i+1]) {check=true;}
		}
		if(!check && i<N-1){AtLeastTwo=true; SwapIndex=i;}
		i++;
	}
	if(AtLeastTwo) cout << "2\n";
	else cout << "1\n";
	
	for(int n:solution) cout << n << " ";
	if (AtLeastTwo) {
		cout << "\n";
		swap(solution[SwapIndex], solution[SwapIndex + 1]);
		for(int n:solution) cout << n << " ";
	}
return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva0/0202ms6716 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva1/11ms316 KiB
9Elfogadva3/31ms316 KiB
10Elfogadva3/33ms316 KiB
11Elfogadva3/33ms472 KiB
12Elfogadva1/13ms316 KiB
13Elfogadva2/23ms432 KiB
14Elfogadva3/32ms316 KiB
15Elfogadva1/1159ms4140 KiB
16Elfogadva3/3143ms9532 KiB
17Elfogadva5/557ms8616 KiB
18Elfogadva1/1231ms12320 KiB
19Elfogadva2/2159ms4528 KiB
20Elfogadva3/3203ms15672 KiB
21Elfogadva4/4202ms19964 KiB
22Elfogadva4/4196ms17328 KiB