样例不输出3 1求助
查看原帖
样例不输出3 1求助
184525
lnhrl楼主2021/8/12 10:19

rt

调试的时候拓扑结束c数组的值是1,1,0,1,1

实在看不出来了,大佬们帮忙看看吧qwq

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int n,p,c[200],to,cnt,head[200];
bool outputpoint[200],vis[200];
struct e_dge{
	int w,to,next;
}edge[200];
queue<int> q;
void add(int u,int v,int w)
{
    edge[cnt].to = v;
    edge[cnt].w = w;
    edge[cnt].next = head[u];
    head[u] = cnt++;
}
int main()
{
	cin>>n>>p;
	for(int i=1;i<=n;i++)
	{
		int t;
		cin>>c[i]>>t;
		if(c[i]>0)
		{
			q.push(i);
			vis[i]=true;
		}
		else
			c[i]-=t;
	}
	for(int i=1;i<=p;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
		outputpoint[u]=true;
	}
	while(!q.empty())
	{
		int f;
		f=q.front();
		q.pop();
		if(c[f]<=0)
			continue;
		for(int i=head[f];i;i=edge[i].next)
		{
			to=edge[i].to;
			c[to]+=c[f]*edge[i].w;
			if(!vis[to])
			{
				q.push(to);
				vis[to]=true;
			}
		}
	}
	bool l=true;
	for(int i=1;i<=n;i++)
	{
		if(!outputpoint[i]&&c[i]>0)
		{
			cout<<i<<" "<<c[i]<<endl;
			l=false;
		}
	}
	if(l)
		cout<<"NULL";
	return 0;
}
2021/8/12 10:19
加载中...