USACO DEC05 GOLD_设计_差分约束系统
来源:互联网 发布:重庆快乐十分遗漏数据 编辑:程序博客网 时间:2024/06/06 14:03
Description
和人一样,牛也喜欢站得离朋友较近的位置。FJ有N(2<=N<=1,000)头牛,编号为1..N,现在要设计一个顺序让他们站成一排给他们喂食。奶牛们按照编号顺序依次站立,允许有多只牛站在同一位置(也就是说,牛i和牛j(i
Input
第1行:3个空格隔开的整数N,ML,MD。
第2到ML+1行:每行包含3个空格隔开的整数A,B和D,满足1<=A
Output
如果不存在这样的方案,输出-1,如果牛1和牛N之间的距离可以任意,输出-2,否则输出最大的距离。
Analysis
亲密的牛需要满足
相互讨厌的牛需要满足
变形,放一起就变成
裸的差分约束系统
转成有向图跑一遍最短路
Code
#include <stdio.h>#include <string.h>#include <queue>#define inf 0x7fffffffusing namespace std;struct edge{int y,w,next;}e[10001];int ls[1001],dis[10001],cnt[1001],maxE=0;queue<int>q;bool vis[1001];void add(int x,int y,int w){ e[++maxE]=(edge){y,w,ls[x]}; ls[x]=maxE;}int main(){ int n,a,b; scanf("%d%d%d",&n,&a,&b); for (int i=1;i<=a;i++) { int x,y,w; scanf("%d%d%d",&x,&y,&w); add(x,y,w); } for (int i=1;i<=b;i++) { int x,y,w; scanf("%d%d%d",&x,&y,&w); add(y,x,-w); } for (int i=0;i<=n;i++) dis[i]=inf; q.push(1); dis[1]=0; vis[1]=true; while (!q.empty()) { int now=q.front();q.pop(); for (int i=ls[now];i;i=e[i].next) if (dis[now]+e[i].w<dis[e[i].y]) { dis[e[i].y]=dis[now]+e[i].w; if (++cnt[e[i].y]>=n) { printf("-1\n"); return 0; } if (!vis[e[i].y]) { vis[e[i].y]=true; q.push(e[i].y); } } vis[now]=false; } if (dis[n]==inf) printf("-2\n"); else printf("%d\n",dis[n]); return 0;}
0 0
- USACO DEC05 GOLD_设计_差分约束系统
- 设计 jzoj 1295 差分约束系统
- usaco布局(差分约束系统的应用)
- 差分约束系统
- 差分约束系统
- 差分约束系统
- 差分约束系统
- 差分约束系统
- 差分约束系统
- 差分约束系统
- 差分约束系统
- 【差分约束系统】
- 差分约束系统
- 差分约束系统
- 差分约束系统
- ##差分约束系统##
- 差分约束系统
- 差分约束系统
- Help Me with the Game(模拟法)
- Java内联函数
- 设计 jzoj 1295 差分约束系统
- PDO学习
- 从uImage到Image,arm64平台上Linux镜像的变化, Booti命令的使用
- USACO DEC05 GOLD_设计_差分约束系统
- CSRF的原理及防御
- iOS开发:UITextView实现placeHolder占位文字的N种方法
- hdu 1028 Ignatius and the Princess III(分解正整数的方案数)
- SingleTask启动activity注意点
- Linux 安装配置DHCP服务器
- <数字图像处理的MATLAB实现笔记>第11章 表示与描述(一)
- 动态规划之最长公共子序列(Longest Common Subsequence)
- git学习笔记--基础知识