180282025-09-25 16:44:51algoproTestnevelés óracpp17Accepted 50/50223ms20480 KiB
// UUID: 73e07ab8-52a8-4754-920d-f389a858c42b
#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, k;
	cin >> n >> k;
	vector<vector<int>> nbrs(n);
	vector<int> indeg(n);
	for(int i=0;i<k;i++){
		int u, v;
		cin >> u >> v;
		nbrs[u-1].push_back(v-1);
		indeg[v-1]++;
	}
	queue<int> q;
	for(int i=0;i<n;i++) if(indeg[i]==0) q.push(i);
	vector<int> vis(n, 0), bucketOf(n, 0);
	vector<vector<int>> bucket(n);
	while(!q.empty()){
		int i=q.front();
		q.pop();
		bucket[bucketOf[i]].push_back(i);
		vis[i]=2;
		for(int j : nbrs[i]){
			if((--indeg[j])<=0){
				if(vis[j]==0){
					bucketOf[j]=bucketOf[i]+1;
					q.push(j);
					vis[j]=1;
				}
				else if(vis[j]==1){
					cout << 0;
					return 0;
				}
			}
		}
	}
	for(int i=0;i<n;i++) if(0!=indeg[i]){
		cout << 0;
		return 0;
	}
	cout << 2-(bucket[n-1].size()) << '\n';
	for(int t=0;t<2;t++){
		for(int i=0;i<n;i++){
			if(bucket[i].size()<=0) break;
			for(int j : bucket[i]) cout << j+1 << ' ';
		}
		cout << '\n';
		if(bucket[n-1].size()<=0){
			for(int i=0;i<n;i++) if(1<bucket[i].size()) swap(bucket[i][0], bucket[i][1]);
			continue;
		}
		break;
	}
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms316 KiB
2Accepted0/01ms316 KiB
3Accepted0/0194ms10096 KiB
4Accepted2/21ms316 KiB
5Accepted3/31ms316 KiB
6Accepted3/31ms316 KiB
7Accepted3/31ms316 KiB
8Accepted1/11ms316 KiB
9Accepted3/31ms500 KiB
10Accepted3/33ms428 KiB
11Accepted3/33ms316 KiB
12Accepted1/12ms316 KiB
13Accepted2/23ms316 KiB
14Accepted3/32ms320 KiB
15Accepted1/1167ms7100 KiB
16Accepted3/3149ms13692 KiB
17Accepted5/550ms16332 KiB
18Accepted1/1223ms19652 KiB
19Accepted2/2163ms7484 KiB
20Accepted3/3223ms20480 KiB
21Accepted4/4209ms20452 KiB
22Accepted4/4216ms20276 KiB