zoukankan      html  css  js  c++  java
  • 【解题报告】洛谷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
  • 相关阅读:
    ajax参考增删改查
    linux 断网 扫描基本命令
    linux 基本命令大全
    开发者用的linux系统推荐
    python DRF获取参数介绍
    python DRF操作流程
    python 异常处理函数--raise
    DRF-Rest_Framework 学习文档
    前端框架VUE
    python Django rest-framework 创建序列化工程步骤
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/15427519.html
Copyright © 2011-2022 走看看