样例能过,但是0pts,求助!
查看原帖
样例能过,但是0pts,求助!
1215295
discretely楼主2024/4/1 16:31
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int N=1e4+10;
int cnt1[N];//记录名次
int cnt2[N];
int n,m;
vector<int> e[N];
int din1[N];
int din2[N];

void toposort(){
	priority_queue<int> a;
	priority_queue<int,vector<int>,greater<int>> b;
	for(int i=1;i<=n;++i){
		//cout<<din1[i]<<endl;
		 if(din1[i]==0){
		 	 a.push(i);b.push(i);//cout<<i<<endl;
		 }
	}
	int now=0;
	while(a.size()){
		auto t=a.top();
		a.pop();
		cnt1[t]=++now;
		//cout<<t<<endl;
		for(auto x:e[t]){
			if(--din1[x]==0) a.push(x);
		}
	}
	now=0;
	while(b.size()){
		auto t=b.top();
		b.pop();
		cnt2[t]=++now;
		for(auto x:e[t]){
			if(--din2[x]==0) b.push(x);
		}
	}
}

int main(){
	cin>>n>>m;
	while(m--){
		int a,b;cin>>a>>b;
		e[a].push_back(b);
		din1[b]++;din2[b]++;
	}
	toposort();
	for(int i=1;i<=n;++i) cout<<cnt1[i]<<endl;
	for(int i=1;i<=n;++i){
		if(cnt1[i]!=cnt2[i]){
			cout<<1<<endl;
			return 0;
		}
	}
	cout<<0<<endl;
	return 0;
}
2024/4/1 16:31
加载中...