UESTC 1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。
题目链接:http://acm.uestc.edu.cn/#/problem/show/1638
题意:
给定n个点(点权未知)和m条信息:u的权值>=v的权值+w
求点权的极小解和极大解(无解则输出-1)
极小解即每个点的点权可能的最小值
极大解即每个点的点权可能的最大值
数据范围:
1<=n<=100000
1<=m<=1000000
0<=w<=100
点权为0到100之间的整数
题解:
差分约束。
求最大值,跑最短路,建一条从v到u权值为w的边。
求最小值,跑最长路,建一条从u到v权值为-w的边。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
const int maxm = 1e6+7;
struct edge{int v, w, next;edge(int v=0, int w=0, int next=0):v(v),w(w),next(next){}
}E1[2*maxm], E2[2*maxm];
int head1[maxn], head2[maxn], cnt1, cnt2;
int n, m, cnt[maxn], inq[maxn], mx[maxn], mi[maxn], Q[maxn];
void init(){memset(head1, -1, sizeof(head1));memset(head2, -1, sizeof(head2));cnt1 = cnt2 = 0;
}
void add(int u, int v, int w, int op)
{if(op&1){E1[cnt1]=edge(v,w,head1[u]), head1[u]=cnt1++;}else{E2[cnt2]=edge(v,w,head2[u]), head2[u]=cnt2++;}
}
bool spfa1(){int top = 0;memset(mi, -1, sizeof(mi));mi[0] = 0;cnt[0] = 1;inq[0] = 1;Q[top++] = 0;while(top){int u = Q[--top]; inq[u] = 0;for(int i = head1[u]; ~i; i = E1[i].next){int v = E1[i].v, w = E1[i].w;if(mi[v] < mi[u] + w){mi[v] = mi[u] + w;if(inq[v]) continue;if(cnt[v] > n) return 0;cnt[v]++;inq[v] = 1;Q[top++] = v;}}}return 1;
}
bool spfa2(){int top = 0;memset(mx, 0x3f, sizeof(mx));memset(inq, 0, sizeof(inq));memset(cnt, 0, sizeof(cnt));mx[0] = 100;cnt[0] = 1;inq[0] = 1;Q[top++] = 0;while(top){int u = Q[--top]; inq[u] = 0;for(int i = head2[u]; ~i; i=E2[i].next){int v = E2[i].v, w = E2[i].w;if(mx[v] > mx[u] + w){mx[v] = mx[u] + w;if(inq[v]) continue;if(cnt[v] > n) return 0;cnt[v]++;inq[v] = 1;Q[top++] = v;}}}for(int i=1; i<=n; i++){if(min(mi[i],mx[i])<0 || max(mi[i],mx[i])>100) return 0;}return 1;
}
int main()
{init();scanf("%d %d", &n,&m);for(int i = 1; i <= m; i++){int u, v, w;scanf("%d %d %d", &u,&v,&w);add(v, u, w, 1);add(u, v, -w, 2);}for(int i = 1; i <= n; i++){add(0, i, 0, 1);add(0, i, 0, 2);}if(spfa1()&&spfa2()){for(int i = 1; i <= n; i++){printf("%d %d\n", mi[i], mx[i]);}}else{puts("-1");}return 0;
}
UESTC 1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。相关推荐
- cdoj1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。
地址:http://acm.uestc.edu.cn/#/problem/show/1638 题目: 红藕香残玉簟秋,轻解罗裳,独上兰舟. Time Limit: 4000/2000MS (Java/ ...
- 【差分约束系统】【强连通分量缩点】【拓扑排序】【DAG最短路】CDOJ1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。...
题意: 给定n个点(点权未知)和m条信息:u的权值>=v的权值+w 求点权的极小解和极大解(无解则输出-1) 极小解即每个点的点权可能的最小值 极大解即每个点的点权可能的最大值 题解: 差分约束 ...
- java—JSON(课堂笔记篇)
简介 JSON: JavaScript Object Notation JS对象简谱 , 是一种轻量级的数据交换格式. 格式: 格式1:对象格式 一个对象, 由一个大括号表示. 括号中 描述 ...
- 杜甫ndows 10怎么安排五笔,燕字五笔怎么打|燕子|杜甫|出处_诗词_综合试卷网_中国教育考试门户网站...
燕字五笔: AUKO 拼音:yàn yān 注音:ㄧㄢˋ 部首:灬 部外笔画:12 总笔画:16 五笔:AUKO 仓颉:TLPF 笔顺编号:1221251211354444 四角号码:44331 释义 ...
- 李清照最经典的10首诗词
在三千年的诗歌艺术中,男人一直是绝对的主角,虽然时常有女诗人,却如流星闪过. 一直到宋代,李清照的横空出世,给文坛带来一股清风. 她被誉为"千古第一才女",她的诗词可柔美.可刚毅. ...
- 安焦删除贴 牛人纷纷出现(1)
安焦删除贴 牛人纷纷出现(1) 安焦删除贴 牛人纷纷出现(2) 安焦删除贴 牛人纷纷出现(3) 安焦删除贴 牛人纷纷出现(4) [Update @ 2004-12-04 23:32] 首页 焦点原创 ...
- 小程序制作宋词欣赏海报
海报就是单纯的一张页面,可以用来练习WXML和WXSS.进一步入门微信小程序.海报效果如下: 在经过小程序的预热一和预热二后,新建一个小程序项目已经不成问题了.海报的制作过程: 1.页面结构实现 页面 ...
- 两宋词人Top10排排座
第1名 北宋苏轼 苏轼,站在宋词巅峰的男人.他豪放词和婉约词双修,都达到了极高的境界.他的极品词篇有18首,是毫无疑问的"宋词第一人". 苏轼水平最高的3首词如下: <定风波 ...
- HTML第二天学习笔记
今天看视频学习的第一个知识是HTML中的块元素<div>和行内元素<span>. 1 <!doctype html> 2 <html lang="e ...
最新文章
- Python控制结构总结
- 安全操作中心之于SDN
- github绑定自己的域名
- python分析nginx日志
- 文法G[E]分析表分析字符串(i+)-编译原理
- vsftpd 创建虚拟用户
- 专为存储设计的LRC编码
- 【网络教程】Chrome内核浏览器开启多线程下载(edge chrome)
- Microsoft office2016(专业增强版) 安装错误,报CRT(KB2999226)错误,详细解决方法
- android 高仿新浪微博,android 仿新浪微博开写篇
- 敏捷转型中的敏态与稳态
- 专科低学历想做web前端开发拿10k、15k高薪,我建议你这样做
- 从无刷直流电动机控制系统电磁兼容设计,谈电磁干扰原理
- AMD CPU搞编程能行吗
- 观音灵签 第六十四签下签卯宫 古人马前覆水
- 初一学生上计算机教学内容,初一计算机教学工作计划.docx
- 设计1-腾讯设计导航
- 蓝牙AOA融合蓝牙信标定位系统的实现
- 在文件选择打开方式里,无法添加.exe程序怎么解决
- 数据模拟:利用Java模拟数据(姓名,邮箱,地址,电话等信息,时间,工资,1-10随机数)并存入mysql
热门文章
- 携手酷依恋6元韩版服饰共享财富
- CCNA2.0笔记_动态路由
- 抖音巨量服务商入驻流程
- 超详细的CentOS7.4下载与图文安装
- 关键路径例题图表_详解关键路径法,这可能是你能找到的最详尽的了
- PAT甲级 1027 Colors in Mars (20分)
- 《点燃我,温暖你》李峋 代码 爱心❤ - 源代码
- Only the original thread that created a view hierarchy can touch its views异常
- Java 数组(三)二维数组
- 此生不戒多巴胺-冲刺日志(第八天)