• 【解题报告】洛谷P1038 神经网络


    【解题报告】洛谷P1038 神经网络

    题目链接

    https://www.luogu.com.cn/problem/P1038

    思路

    一看,就是拓扑排序

    这个相当于拓扑排序的板子题目吧qaq

    然后我们就直接做了

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <queue>
    #define int long long
    using namespace std;
    const int maxn=105;
    struct edge{
    	int e,next,val;
    }ed[maxn*maxn];
    int en,first[maxn];
    void add_edge(int s,int e,int val)
    {
    	en++;
    	ed[en].next=first[s];
    	first[s]=en;
    	ed[en].e=e;
    	ed[en].val=val;
    }
    int n,p;
    int C[maxn],U[maxn];
    int st[maxn];
    bool vis[maxn],out[maxn];
    queue <int> q;
    signed main()
    {
    	cin>>n>>p;
    	for(int i=1;i<=n;i++)
    	{
    		vis[i]=out[i]=false;
    		cin>>C[i]>>U[i];
    		if(C[i]>0)
    		{
    			q.push(i);
    			vis[i]=true;
    		}
    		else
    		C[i]-=U[i];
    	}
    	for(int i=1;i<=p;i++)
    	{
    		int x,y,z;
    		cin>>x>>y>>z;
    		add_edge(x,y,z);
    		out[x]=true;
    	}
    	while(q.size())
    	{
    		int x=q.front();
    		q.pop();
    		if(C[x]<0) continue;
    		for(int i=first[x];i;i=ed[i].next)
    		{
    			int e=ed[i].e;
    			int val=ed[i].val;
    			C[e]+=(val*C[x]);
    			if(!vis[e])
    			{
    				vis[e]=true;
    				q.push(e);
    			} 
    		}
    	}
    	bool flag=false;
    	for(int i=1;i<=n;i++)
    	{
    		if(!out[i]&&C[i]>0)
    		{
    			flag=true;
    			cout<<i<<" "<<C[i]<<'
    ';
    		}
    	}
    	if(!flag)
    	cout<<"NULL"<<'
    ';
    	return 0;
    }
    
    本博文为wweiyi原创,若想转载请联系作者,qq:2844938982
  • 相关阅读:
    需求分析的方法与实践
    系统架构分析与设计方法论
    装修-3
    装修-2
    装修-1
    daikuan
    JAVA容器全面总结
    超图8C iserver启动成功,访问不了网站localhost:8090/iserver/manager,显示404
    Arcgis中给字段添加属性域
    arcgis for server搭建集群环境
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/15427519.html
Copyright © 2020-2023  润新知