有助于提高找错能力
查看原帖
有助于提高找错能力
1059675
fyc_LC楼主2024/11/21 23:16
#include<bits/stdc++.h>
using namespace std;
struct pt{
	int w,t;
};
struct point{
	int u,w;
};
point p[5200];
vector<pt> v1[5200];
long long cnt[5200],zc[5200],ans[5200],cnt2[5200];
bool vis[5200]; 
queue<int> q;
priority_queue<int,vector<int>,greater<int> > pq;
void sc(int x){
	int siz=v1[x].size();
	for(int i=0;i<siz;i++){
		cnt[v1[x][i].t]--;
		if(ans[x]>0){
			ans[v1[x][i].t]+=(ans[x]*v1[x][i].w);
		}//下一个点传输 
		if(cnt[v1[x][i].t]==0){
			ans[v1[x][i].t]-=p[v1[x][i].t].u;
			q.push(v1[x][i].t);		
		}//下一个点删完 
	}
}
void topsort(){
	while(q.size()!=0){
		sc(q.front());
		q.pop();
	}
}
int main(){
	int n,m,x,y;
	cin>>n>>m;
	int v,u;
	for(int i=1;i<=n;i++){
		 cin>>v>>u;
		 if(v!=0){
		 	q.push(v);
		 	ans[i]=v;
		 } 
		 p[i].u=u;
		 p[i].w=v;
	}
	pt tmp;
	for(int i=1;i<=m;i++){
		cin>>u>>tmp.t>>tmp.w;
		v1[u].push_back(tmp);
		cnt[tmp.t]++;//rd;
		cnt2[u]++;//cd; 
	}
	for(int i=1;i<=n;i++){
		if(cnt2[i]==0){
			pq.push(i);
		}
	}
	topsort();
	bool flag=1;
	int tp;
	while(pq.size()!=0){
		tp=pq.top();
		pq.pop();
		if(ans[tp]<=0){
			continue;
		}
		flag=0;
		cout<<tp<<" "<<ans[tp]<<endl;
	}
	if(flag){
		cout<<"NULL";
	}
	return 0;
}

ac代码

#include<bits/stdc++.h>
using namespace std;
struct pt{
	int w,t;
};
struct point{
	int u,w;
};
point p[5200];
vector<pt> v1[5200];
long long cnt[5200],zc[5200],ans[5200],cnt2[5200];
bool vis[5200]; 
queue<int> q;
priority_queue<int,vector<int>,greater<int> > pq;
void sc(int x){
	int siz=v1[x].size();
	for(int i=0;i<siz;i++){
		cnt[v1[x][i].t]--;
		if(ans[x]>0){
			ans[v1[x][i].t]+=(ans[x]*v1[x][i].w);
		}//下一个点传输 
		if(cnt[v1[x][i].t]==0){
			ans[v1[x][i].t]-=p[v1[x][i].t].u;
			q.push(v1[x][i].t);		
		}//下一个点删完 
	}
}
void topsort(){
	while(q.size()!=0){
		sc(q.front());
		q.pop();
	}
}
int main(){
	int n,m,x,y;
	cin>>n>>m;
	int v,u;
	for(int i=1;i<=n;i++){
		 cin>>v>>u;
		 if(v!=0){
		 	q.push(i);
		 	ans[i]=v;
		 } 
		 p[i].u=u;
		 p[i].w=v;
	}
	pt tmp;
	for(int i=1;i<=m;i++){
		cin>>u>>tmp.t>>tmp.w;
		v1[u].push_back(tmp);
		cnt[tmp.t]++;//rd;
		cnt2[u]++;//cd; 
	}
	for(int i=1;i<=n;i++){
		if(cnt2[i]==0){
			pq.push(i);
		}
	}
	topsort();
	bool flag=1;
	int tp;
	while(pq.size()!=0){
		tp=pq.top();
		pq.pop();
		if(ans[tp]<=0){
			continue;
		}
		flag=0;
		cout<<tp<<" "<<ans[tp]<<endl;
	}
	if(flag){
		cout<<"NULL";
	}
	return 0;
}

快来不同

2024/11/21 23:16
加载中...