Description
某工厂发现厂里的机器在生产产品时要消耗大量的原材料,也就是说,有大量的原材料变成了废物。因此厂里想找出消耗原材料最大的一条生产线路进行改造,以降低成本。厂里的生产线路是一个有向无环网络,有N台机器分别代表网络中的N个结点。弧< I,j >(i < j)表示原材料从机器i传输到机器j的损耗数量。
Input
第一行是两个整数N,M(N<=100,M<=1000),分别表示网络的结点个数和弧数。第二行至M+1行,每行三个整数A,B,C,表示弧上的损耗为C。
Output
仅一个整数,为损耗最大的线路的损耗量。
Sample Input
5 5
1 2 2
2 4 9
1 3 7
3 4 1
4 5 6
Sample Output
17
最近几道,都是模板题
#include<iostream>
using namespace std;
int m,n,k,x,y,x1,y1;
int a[101][101],dis[101][101],v[101],p[10010101];
int spfa(int x){
memset(v,0,sizeof(v));
dis[x][x]=0;
p[1]=x;
v[x]=1;
int head=0,tail=1;
while(head<=tail){
head++;
int x1=p[head];
for(int i=1;i<=n;i++){
if(dis[x][x1]+a[x1][i]>dis[x][i]&&a[x1][i]!=0){
dis[x][i]=dis[x][x1]+a[x1][i];
if(v[i]==0){
v[i]=1;
tail++;
p[tail]=i;
}
}
}
v[x1]=0;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x>>y>>k;
a[x][y]=k;
}
for(int i=1;i<=n;i++){
spfa(i);
}
int maxx=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(dis[i][j]>maxx)maxx=dis[i][j];
}
}
cout<<maxx;
}