帮帮孩子吧,真不知道哪里错了
  • 板块灌水区
  • 楼主不慕放糖
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/9/25 15:19
  • 上次更新2023/11/4 05:41:47
查看原帖
帮帮孩子吧,真不知道哪里错了
544113
不慕放糖楼主2021/9/25 15:19

p2712

#include<bits/stdc++.h>
using namespace std;
vector<int>e[200002];
queue<int>q;
int in[200002],ans;
bool v[5000002];
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		int x,m,y;
		cin>>x>>m;
		v[x]=true;
		for(int i=1;i<=m;i++){
			cin>>y;
			
			e[x].push_back(y);
			in[y]++;
		}
	}
	for(int i=1;i<=n;i++){
		if(in[i]==0) q.push(i);
	}
	while(!q.empty()){
		int u=q.front();q.pop();
		ans++;//进了队列的就砸;
		for(int i=0;i<e[u].size();i++){
			in[e[u][i]]--;//u点通往的第i条边的点的入度-- 
			if(in[e[u][i]]==0&&v[e[u][i]]==true) q.push(e[u][i]);//如果为0,把这个点压 进去 
		} 
	}
	if(ans==n) cout<<"YES"<<endl;
	else cout<<n-ans;
	return 0; 
}

思路就是拓扑排序,入度为0就砸 但是为什么70分

2021/9/25 15:19
加载中...