#include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<stack> #include<list> #include<stdlib.h> #include<algorithm> #include<vector> #include<map> #include<set> #include <fstream> using namespace std; const int maxn=1111; int head[maxn]; int len; struct Node { int to;int val;int next; }e[1111111]; void add(int from,int to,int val) { e[len].to=to;e[len].val=val; e[len].next=head[from]; head[from]=len++; } int vis[maxn]; int dis[maxn]; int cnt[maxn]; int n,m; const int INF=0xfffffff; int spfa(int x) { for(int i=0;i<=n;i++){ dis[i]=INF;vis[i]=0; } dis[x]=0;vis[x]=1; queue<int> q; q.push(x); cnt[x]++; while(!q.empty()){ int cur=q.front(); q.pop();vis[cur]=0; for(int i=head[cur];i!=-1;i=e[i].next){ int cc=e[i].to; if(dis[cc]>dis[cur]+e[i].val){ dis[cc]=dis[cur]+e[i].val; if(!vis[cc]){ vis[cc]=1;cnt[cc]++;if(cnt[cc]>n) return 0; // cout<<cc<<" "<<cnt[cc]<<endl;system("pause"); q.push(cc); } } } } return 1; } int main() { while(cin>>n>>m){ memset(head,-1,sizeof(head)); memset(cnt,0,sizeof(cnt)); len=0; for(int i=1;i<=n;i++){ int a;cin>>a; add(i-1,i,a); add(i,i-1,0); } for(int i=0;i<m;i++){ int a;int b;int c; cin>>a>>b>>c; add(b,a-1,-c); } int t=spfa(n); if(!t) cout<<"Bad Estimations"<<endl; else cout<<-dis[0]<<endl; } return 0; }
原文地址:http://www.cnblogs.com/yigexigua/p/3849599.html