p1038拓扑排序求调(悬关)
  • 板块题目总版
  • 楼主ST_jz_xpj
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/24 18:55
  • 上次更新2024/10/24 19:57:27
查看原帖
p1038拓扑排序求调(悬关)
1378388
ST_jz_xpj楼主2024/10/24 18:55

原题地址:here

#include<iostream>
#include<queue>
using namespace std;
int n,p,a,b,w,u;
struct po{
	int in,c;
	vector <int> way;vector <int> f;
}q[110];
queue <int> l;
queue <int> ans;
void move(int i){
	if(q[i].c>0){
		for(int j=0;j<(int)q[i].way.size();j++){
			q[q[i].way[j]].c+=q[i].f[j]*q[i].c;q[q[i].way[j]].in--;
		}
	}
}
int main(){
	cin>>n>>p;
	for(int i=1;i<=n;i++) {
		scanf("%d%d",&q[i].c,&u);
		if(q[i].c==0)q[i].c-=u;
		q[i].in=0;
		l.push(i);
	}
	for(int i=0;i<p;i++){
		scanf("%d%d%d",&a,&b,&w);
		q[b].in++;
		q[a].way.push_back(b);q[a].f.push_back(w);
	}
	for(int i=1;i<=n;i++) if(q[i].way.empty()) ans.push(i);
	while(!l.empty()){
		if(q[l.front()].in==0)move(l.front());
		else l.push(l.front());
		l.pop();
	}
	bool ap=false;
	for(int i=(int)ans.size();i>0;i--){
		if(q[ans.front()].c>0){
			ap=true;cout<<ans.front()<<" "<<q[ans.front()].c<<endl;
		}
		ans.pop();
	}
	if(!ap)cout<<"NULL";
	return 0;
}

60tps,TLE#3,#4 救救救!

2024/10/24 18:55
加载中...