• poj 3169 Layout (差分约束)


    // n头牛 按1到n顺序站  当然 i可以和i+1站一起 不过不能站i+1后面
    // 现在给你些约束 前ml个约束 a,b,d a<b,a和b距离不能大于d 后md个约束 a,b,d a<b ,a和b距离不能低于d
    // 根据题目说的 还有 b-a>=0这个约束( 其中 a,b相邻 b编号比a大) 具体见代码
    #include <iostream> #include <map> #include <algorithm> #include <queue> #include <math.h> #include <stdio.h> #include <string.h> #include <vector> using namespace std; #define MOD 1000000007 #define maxn 21010 #define maxm 1010 struct node{ int to; int next; int val; }E[maxn]; int num; int V[maxm]; int d[maxm],cnt[maxm]; bool f[maxm]; bool sfpa(int s,int t){ // s既表示起点 有表示节点个数 queue <int> Q; int u,v; int e; Q.push(s); d[s]=0; f[s]=true; while(!Q.empty()){ u=Q.front(); Q.pop(); cnt[u]++; if(cnt[u]>t) return false; // 刚刚还说模板好 结果就被坑了,起点换了 这次是t代表元素个数了、、 f[u]=false; for(e=V[u];e!=-1;e=E[e].next){ v=E[e].to; if(d[u]+E[e].val<d[v]){ d[v]=d[u]+E[e].val; if(!f[v]) { f[v]=true; Q.push(v); } } } } return true; } int main(){ int i,j,k; int n,ml,md; while(scanf("%d %d %d",&n,&ml,&md)!=EOF){ for(i=1;i<=n;i++) { V[i]=-1; d[i]=MOD; cnt[i]=0; f[i]=false; } num=0; while(ml--){ scanf("%d %d %d",&i,&j,&k); E[num].to=j; E[num].val=k; E[num].next=V[i]; V[i]=num++; } while(md--){ scanf("%d %d %d",&i,&j,&k); E[num].to=i; E[num].val=-k; E[num].next=V[j]; V[j]=num++; } for(i=n;i>1;i--){ E[num].to=i-1; E[num].val=0; E[num].next=V[i]; V[i]=num++; } if(!sfpa(1,n)) printf("-1 "); else{ if(d[n]==MOD) d[n]=-2; printf("%d ",d[n]); } } }
  • 相关阅读:
    Fiddler捕获抓取 App端数据包
    配置Java SSL 访问网站证书
    win10+vs2015+opencv3.0 x86/x64配置(debug+release)
    VMware虚拟机安装CentOS 7并搭建lamp服务器环境
    ubuntu18.04下eclipse配置及快捷方式创建
    ubuntu 安装vmware workstation
    linux安装出错
    [集合]java中的 可变参数
    泛型
    [集合]List
  • 原文地址:https://www.cnblogs.com/372465774y/p/3198567.html
Copyright © 2020-2023  润新知