纯暴力WA四个点
查看原帖
纯暴力WA四个点
150611
mrozhx楼主2020/8/11 10:15

第一次只有40分,改完就剩20了

#include<bits/stdc++.h>
using namespace std;
int n,p,tot=0,u;
int c[210],head[210],chu[210],ceng[210],maxf=0;
struct line{
	int e,w,next;
}l[80010];
void run(int now){
	for(int i=head[now];i&&i%2!=0;i=l[i].next){
		c[l[i].e]+=(l[i].w*c[now]);
	}
}
void add(int from,int to,int value){
	tot++;
	if(tot%2==1) chu[from]++;
	l[tot].e=to;
	l[tot].next=head[from];
	head[from]=tot;
	l[tot].w=value;
}
void walk(int now,int fl){
	ceng[now]=fl;
	maxf=max(maxf,fl);
	for(int i=head[now];i!=0;i=l[i].next){
		if(i%2!=0) continue;
		walk(l[i].e,fl+1);
	}
	return;
}
int main(){
	int from,to,v;
	cin>>n>>p;
	for(int i=1;i<=n;i++){
		cin>>c[i]>>u;
		c[i]-=u;
	}
	for(int i=1;i<=p;i++){
		cin>>from>>to>>v;
		add(from,to,v);
		add(to,from,v);
	}
	for(int i=1;i<=n;i++){
		if(chu[i]==0){
			walk(i,1);
		}
	}
	for(int i=maxf;i>0;i--){
		for(int j=1;j<=n;j++){
			if(ceng[j]==i&&c[j]>0){
				run(j);	
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(ceng[i]==1)
			cout<<i<<" "<<c[i]<<endl;
	}
}
2020/8/11 10:15
加载中...