神奇贪心求hack
查看原帖
神奇贪心求hack
500031
FJ_OIer楼主2024/10/25 16:49
#include <bits/stdc++.h>
#define N 500001
using namespace std;
int n,m,u,v,past,cnt;
int in[N],In[N];
priority_queue<int,vector<int>,greater<int> > q;
priority_queue<int> Q;
vector<int> e[N];
int main(){
	cin>>n>>m;
	while (m--){
		cin>>u>>v;
		e[u].push_back(v);
		in[v]++;
	}
	for (int i=1;i<=n;i++){
		In[i]=in[i];
		if (!in[i]){
			q.push(i);
			Q.push(i);
		}
	}
	cnt=0;
	while (!q.empty()){
		int u=q.top();
		q.pop();
		if (u>past){
			cnt++;
		}
		past=max(past,u);
		for (int v:e[u]){
			in[v]--;
			if (!in[v]){
				q.push(v);
			}
		}
	}
	cout<<cnt<<endl;
	cnt=0,past=0;
	while (!Q.empty()){
		int u=Q.top();
		Q.pop();
		if (u>past){
			cnt++;
		}
		past=max(past,u);
		for (int v:e[u]){
			In[v]--;
			if (!In[v]){
				Q.push(v);
			}
		}
	}
	cout<<cnt;
	return 0;
}

除了两个点AC其他都只拿了40%(挺6的)

2024/10/25 16:49
加载中...