Layout POJ - 3169 差分约束 SPFA
2017-11-30 12:51
411 查看
/** 题目大概的意思就是:两个小牛不喜欢对方,每两头牛之间就会产生一些距离感 我们需要计算第一头牛和最后一头牛的最大距离;(嫌弃的距离最大) 然后呢它给出了每两头牛的最短距离和限制的最大距离,存在两种约束条件,转换一下就变成了最短路; 我们可以选择按照前向星建图正向接正和反向接负的方法, 然后跑一波SPFA找到最短路; 输出的话呢,就是 牛不站在一排的话(简单的说就是存在负环),输出-1; 牛1和牛n的距离超过了限制(找不到最短路),输出-2; 最优的情况就输出最短距离; 统一的说这个题呢就是:差分约束加SPFA; 再来补充一句,SPFA是真的好用,不土鳖而且暴力姿势很优雅; */ #include<cstdio> #include<cstring> #include<queue> using namespace std; const int maxn=2e5+7; const int inf=0x3f3f3f3f; struct node { int to,w,next; }edge[maxn]; int head[maxn],vis[maxn],num[maxn],dis[maxn],n,ml,md,cnt; void add(int u,int v,int w) { edge[cnt].to=v; edge[cnt].w=w; edge[cnt].next=head[u]; head[u]=cnt++; } void SPFA() { for(int i=1;i<=n;i++) dis[i]=inf; dis[1]=0; memset(vis,0,sizeof(vis)); memset(num,0,sizeof(num)); queue<int>Q; Q.push(1); int flag=0; while(!Q.empty()) { int u=Q.front(); num[u]++; if(num[u]>n){flag=1;break;} Q.pop(); vis[u]=0; for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].to; if(dis[v]>dis[u]+edge[i].w) { dis[v]=dis[u]+edge[i].w; if(!vis[v]){vis[v]=1;Q.push(v);} } } } if(flag==1) printf("-1\n"); else if(dis ==inf)printf("-2\n"); else printf("%d\n",dis ); } int main() { while(~scanf("%d %d %d",&n,&ml,&md)) { cnt=0; memset(head,-1,sizeof(head)); /** u比v最多大于w; */ for(int i=1;i<=ml;i++) { int u,v,w; scanf("%d %d %d",&u,&v,&w); add(u,v,w); } /** u比v最少小于w,反过来讲就是v比u大于-w; */ ///可能开始就是卡在这个点吧,建图稍有不慎,WA WA WA WA; for(int i=1;i<=md;i++) { int u,v,w; scanf("%d %d %d",&u,&v,&w); add(v,u,-w); } SPFA(); } }
相关文章推荐
- POJ 3169 Layout(差分约束 spfa)
- POJ 3169 Layout (差分约束spfa)
- Layout Poj 3169 差分约束与SPFA
- poj 3169 Layout(差分约束)
- poj 3169 Layout 差分约束模板题
- 差分约束——Layout ( POJ 3169 )
- Layout POJ - 3169(差分约束) 题解
- POJ_3169_Layout【差分约束】
- poj 3169 差分约束 + spfa
- POJ ~ 3169 ~ Layout (SPFA + 差分约束)
- POJ 3169(差分约束 + spfa模板)
- [POJ 3169]Layout[差分约束][最短路]
- poj 3169 Layout(差分约束)
- POJ 3169 Layout (差分约束)
- POJ 3169 Layout (Bellman-Ford、差分约束)
- poj 3169 Layout (差分约束)
- POJ 3169 Layout 差分约束/Bellman-Ford
- POJ-3169 Layout 差分约束
- POJ 题目3169 Layout(差分约束)
- POJ 3169 Layout(差分约束) - from lanshui_Yang