1>神经网络
绿题
为什么用拓扑?
1)必备条件:DAG
2)本题的公式上,显示需要计算出能连接到本点的,全部的边值*点值
故而当我开始推这个点时,他的所有先驱点的状态全部都要求完
这只能是topo_sort
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<vector>
using namespace std;
int n,m;
const int N=103;
int c[N],in[N],sz[N];
struct node
{
int v,w;
node(int vv,int ww)
{ v=vv,w=ww; }
node(){}
};
vector <node > g[N];
queue <int > q;
void topo_sort()
{
while(!q.empty())
{
int t=q.front();q.pop();
sz[t]=g[t].size() ;
for(int i=0;i<sz[t];i++)
{
node v=g[t][i];
if(c[t]>0) c[v.v ]+=c[t]*v.w ;
if(--in[v.v ]==0) q.push(v.v );
}
}
}
int main()
{
scanf("%d%d",&n,&m);
int x;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&c[i],&x);
if(c[i]>0) q.push(i);
else c[i]-=x;
}
int u,v,w;
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
g[u].push_back(node(v,w));
in[v]++;
}
topo_sort();
bool fail=true;
for(int i=1;i<=n;i++)
if(!sz[i] && c[i]>0)
{
printf("%d %d\n",i,c[i]);
fail=false;
}
if(fail) printf("NULL\n");
return 0;
}
2>校园网络