P1038
  • 板块学术版
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/11/25 14:34
  • 上次更新2023/10/27 01:35:02
查看原帖
P1038
703834
封禁用户楼主2022/11/25 14:34

为什么会错为什么会错

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define vd void
#define bl bool
#define il inline
#define N 110
#define M 10010
il int read(){
	int x=0;
	bool w=1;
	char ch=getchar();
	while(ch<48||ch>57){
		if(ch==45) w=0;
		ch=getchar();
	}while(ch>47&&ch<58){
		x=(x<<3)+(x<<1)+(ch^48);
		ch=getchar();
	}
	return w?x:(-x);
}
il vd write(int x){
	if(x<0){
		putchar(45);
		x=-x;
	}
	if(x>9) write(x/10);
	putchar(x%10+48);
}
struct edge{
	int to,nxt,v;
}s[M];
int n=read(),m=read(),k[N],kt,a[N],b[N],tot,U[N],h[N],D[N],vis;
queue<int> q;
bl print=1; 
il vd lj(int l,int r,int w){
	tot++;
	s[tot].to=r;
	s[tot].v=w;
	s[tot].nxt=h[l];
	h[l]=tot;
}
signed main(){
	for(int i=1;i<=n;i++){
		a[i]=read(),b[i]=read();
//		if(a[i]!=0) b[i]=0;
//		else a[i]-=b[i];
	}
	while(m--){
		int x=read(),y=read(),w=read();
		lj(x,y,w); 
		U[y]++;
		D[x]++;
//		a[y]=0;
	}
	for(int i=1;i<=n;i++) if(!U[i]) q.push(i);
	while(!q.empty()){
		int x=q.front();
//		cout<<a[4]<<endl;
//		cout<<x<<endl;
		q.pop();
//		v[x]=0;
		if(!D[x]){
			if(a[x]!=0) print=0;
			if(a[x]>0) k[++kt]=x;
			continue;
		}
		if(a[x]<=0) continue;
		for(int i=h[x];i!=0;i=s[i].nxt){
			int t=s[i].to;
			a[t]+=s[i].v*a[x];
//			cout<<a[t]<<endl;
			U[t]--;
			D[x]--;
			if(!U[t]) q.push(t),a[t]-=b[t];
		}
	}
	if(!kt) puts("NULL");
	else{
		sort(k+1,k+1+kt);
		for(int i=1;i<=kt;i++){
			write(k[i]);
			putchar(32);
			write(a[k[i]]);
			putchar(10);
		}
	}
	return 0;
} 
//请大佬帮忙修改一下代码
2022/11/25 14:34
加载中...