zoukankan      html  css  js  c++  java
  • 差分约束 4416 FFF 团卧底的后宫

    /*

    4416 FFF 团卧底的后宫

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
     
     
    题目描述 Description

    你在某日收到了 FFF 团卧底的求助,在他某日旅游回来,他的后宫们出现了一些不可调和的矛盾,如果 FFF 团卧底把自己的宝贝分给 a 号妹子,那么 b 号妹子至少要在站在 a 号妹子的右边距离 d,妹子才愿意得到那个宝贝。可是后宫里也有玩得好的妹子呀,她们总是渴望亲近一点,如果把自己的宝贝分给 a 号妹子,那么与她亲近的妹子与 a 号妹子的距离不会超过 l。现在总共有 n 个妹子,k 个这样的矛盾关系,m 个亲近关系。假设他的宝贝是无限的,保证每一个妹子都有宝贝的情况下,第 n 个妹子和第一个妹子的最远距离是多少呢?

    输入描述 Input Description

    第一行为 n,m,k

    此后 m 行为亲近关系

    此后 k 行为矛盾关系

    输出描述 Output Description

    一行,为最长的距离*/

    //差分约束  如果x与y之间距离小于k,建一条x到y权值为k的边;如果x与y之间距离大于k,建一条y到x权值为-k的边;
    #include<cstdio> #include<iostream> #define M 99999999 using namespace std; int cnt,n,m1,m2,head[1005],next[40005],u[40006],f[1005],t[1005],b[1005]; long long d[1005],v[40005]; int ha,ta; void jia(int a1,int a2,int a3) { cnt++; next[cnt]=head[a1]; head[a1]=cnt; u[cnt]=a2; v[cnt]=a3; return; } int main() { int a1,a2,a3; scanf("%d%d%d",&n,&m1,&m2); for(int i=1;i<=m1;i++) { scanf("%d%d%d",&a1,&a2,&a3); jia(a1,a2,a3); } for(int i=1;i<=m2;i++) { scanf("%d%d%d",&a1,&a2,&a3); jia(a2,a1,-a3); } for(int i=2;i<=n;i++) d[i]=M; ta=1; f[1]=1; t[1]++; b[1]=1; for(;ha!=ta;) { ha++; if(ha>1002) ha=1; b[f[ha]]=0; for(int i=head[f[ha]];i;i=next[i]) if(d[u[i]]>d[f[ha]]+v[i]) { d[u[i]]=d[f[ha]]+v[i]; t[u[i]]++; if(t[u[i]]==n+1) { printf("-1"); return 0; } if(!b[u[i]]){ta++; if(ta>1002) ta=1; b[u[i]]=1; f[ta]=u[i];} } } if(d[n]==M) printf("-2"); else printf("%lld",d[n]); return 0; }
  • 相关阅读:
    Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
    Atitti 大话存储读后感 attilax总结
    Atitit 设计模式的本质思考】
    Atitit 深入理解抽象类与接口 attilax总结
    Atitit 动态调用webservice与客户端代理方式调用
    atitit. 深入理解Cohesion)原理ad  attilax大总结
    Atitit.软件开发的几大规则,法则,与原则Principle v3
    Atitti  onvif 设备发现与原理
    Atitit 边缘检测原理attilax总结
    Atitit wsdl的原理attilax总结
  • 原文地址:https://www.cnblogs.com/xydddd/p/5153376.html
Copyright © 2011-2022 走看看