首页 > 代码库 > zoj2770差分约束
zoj2770差分约束
#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;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。