cdoj1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。
地址:http://acm.uestc.edu.cn/#/problem/show/1638
题目:
红藕香残玉簟秋,轻解罗裳,独上兰舟。
Time Limit: 4000/2000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
考试结束后,为了证明自己才是最蒻的,同学们纷纷去找老师查分阅数—哦不—是查阅分数。
可老师担心学生知道自己的成绩会伤心,于是只告诉学生这样的信息:
编号为 uu 的学生分数比编号为 vv 的学生分数高 ww 分甚至更多。
知道这些信息后,同学们想知道自己分数可能的 最小值 和 最大值 。不过老师记性不太好,给出的信息可能有误。
Input
第一行两个整数 nn 和 mm,表示学生个数和老师给的信息数。
接下来 mm 行每行三个整数 uu 、vv 和 ww,含义如上文所描述。
学生从 11 到 nn 编号,学生的分数为 00 到 100100 之间的整数。
1≤n≤1000001≤n≤100000,1≤m≤10000001≤m≤1000000,1≤u1≤u 、v≤nv≤n,0≤w≤1000≤w≤100 。
Output
若老师给出的信息有误,仅输出一行 −1−1 。
否则输出 nn 行,第 ii 行为以空格隔开的两个整数,分别表示编号为 ii 的学生的分数可能的 最小值 和 最大值 。
Sample input and output
Sample Input | Sample Output |
---|---|
2 2 |
-1 |
3 2 |
2 100 |
Source
#include <bits/stdc++.h> using namespace std; #define MP make_pair
#define PB push_back
typedef long long LL;
typedef pair<int,int> PII;
const double eps=1e-;
const double pi=acos(-1.0);
const int K=1e6+;
const int mod=1e9+; struct node
{
int to,v,next;
node(){}
node(int x,int y,int z){to=x,v=y,next=z;}
}eg1[*K],eg2[*K];
int t1,t2,hd1[K],hd2[K];
void add(int u,int v,int w,int op)
{
if(op&)
eg1[t1]=node(v,w,hd1[u]),hd1[u]=t1++;
else
eg2[t2]=node(v,w,hd2[u]),hd2[u]=t2++;
}
int n,m,cnt[K],inque[K],mx[K],mi[K],Q[K];
bool spfa1(void)
{
int top=;
memset(mi,-,sizeof mi);
Q[top++]=,inque[]=,cnt[]=,mi[]=;
while(top)
{
int u=Q[--top];
inque[u]=;
for(int i=hd1[u];~i;i=eg1[i].next)
{
int v=eg1[i].to,w=eg1[i].v;
if(mi[v]<mi[u]+w)
{
mi[v]=mi[u]+w;
if(inque[v]) continue;
if(cnt[v]>n) return ;
Q[top++]=v,inque[v]=,cnt[v]++;
} }
}
return ;
}
bool spfa2(void)
{
int top=;
memset(inque,,sizeof inque);
memset(cnt,,sizeof cnt);
memset(mx,0x3f3f3f3f,sizeof mx);
Q[top++]=,inque[]=,cnt[]=,mx[]=;
while(top)
{
int u=Q[--top];
inque[u]=;
for(int i=hd2[u];~i;i=eg2[i].next)
{
int v=eg2[i].to,w=eg2[i].v;
if(mx[v]>mx[u]+w)
{
mx[v]=mx[u]+w;
if(inque[v]) continue;
if(cnt[v]>n) return ;
Q[top++]=v,inque[v]=,cnt[v]++;
}
}
}
for(int i=;i<=n;i++)
if(min(mi[i],mx[i])<||max(mx[i],mi[i])>)
return ;
return ;
}
int main(void)
{
memset(hd1,-,sizeof hd1);
memset(hd2,-,sizeof hd2);
scanf("%d%d",&n,&m);
for(int i=,u,v,w;i<=m;i++)
scanf("%d%d%d",&u,&v,&w),add(v,u,w,),add(u,v,-w,);
for(int i=;i<=n;i++)
add(,i,,),add(,i,,);
if(spfa1()&&spfa2())
for(int i=;i<=n;i++)
printf("%d %d\n",mi[i],mx[i]);
else
printf("-1\n");
return ;
}
cdoj1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。的更多相关文章
- 【差分约束系统】【强连通分量缩点】【拓扑排序】【DAG最短路】CDOJ1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。
题意: 给定n个点(点权未知)和m条信息:u的权值>=v的权值+w 求点权的极小解和极大解(无解则输出-1) 极小解即每个点的点权可能的最小值 极大解即每个点的点权可能的最大值 题解: 差分约束 ...
- HTML第二天学习笔记
今天看视频学习的第一个知识是HTML中的块元素<div>和行内元素<span>. <!doctype html> <html lang="en&qu ...
- 算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。
只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/588 ...
- win7系统下的飞秋发送文件失败问题
飞秋发送文件失败这个问题大多数是由防火墙引起的1.检查windows自带的防火墙设置,在左侧的"允许程序通过windows防火墙"查看飞秋是否存在,不存在则增加之,公网.专网都勾选 ...
- wireshake抓包,飞秋发送信息,python
http://wenku.baidu.com/link?url=Xze_JY8T15pqI9mBLRpTxWF2d6MP-32xb6UwuE6tsUmitRDheJe-Ju87WlDEDBGuI5MF ...
- uestc 1073 秋实大哥与线段树 Label:线段树
秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) “学习本无底, ...
- 利用WinPcap模拟网络包伪造飞秋闪屏报文
起因 不知道从什么时候开始,同事开始在飞秋上发闪屏振动了,后来变本加厉,成了每日一闪.老闪回去也比较麻烦,作为程序猿呢,有没有什么偷懒的办法呢?(同事负责用户体验,不大懂编程).然后尝试了以下思路: ...
- Swing做的非阻塞式仿飞秋聊天程序
采用Swing 布局 NIO非阻塞式仿飞秋聊天程序, 切换皮肤颜色什么的小功能以后慢慢做 启动主程序. 当用户打开主程序后自动获取局域网段IP可以在 设置 --> IP网段过滤, 拥有 JMF ...
- 针对局域网IM飞秋(feiq)的开发总结
先上代码了,通过java代码群发feiq消息: package com.triman.constant; import java.io.IOException; import java.io.Unsu ...
随机推荐
- C++ STL迭代器与索引相互转换
0 前言 C++ STL提供了vector.list等模板容器,极大地方便了编程使用. “遍历”是对容器使用的最常用的操作. 使用迭代器来遍历是最好最高效的遍历方法. 当然,对于有些容器的遍历除了使用 ...
- React Native开发技术
http://www.lcode.org/react-native-week-issue22/
- HDU2586.How far away ?——近期公共祖先(离线Tarjan)
http://acm.hdu.edu.cn/showproblem.php?pid=2586 给定一棵带权有根树,对于m个查询(u,v),求得u到v之间的最短距离 那么仅仅要求得LCA(u,v),di ...
- THINKPHP5加载公共头部尾部模板方法
之前在3.2中用 <include file="public/header" /> 后来发现在thinkphp5中应该这样写才行 {include file=" ...
- Unreal新建C++类或C++项目失败
出现以下错误: ... UnrealBuildTool Exception: System.UnauthorizedAccessException.... ... 是C盘无法访问权限的错误,请参考上一 ...
- Fragment之间传数据
1.用bundle存Bundle bundle = new Bundle();bundle.putString("cid1", classList.get(i).getId()); ...
- Python全栈day18(迭代器协议和for循环工作机制)
一,什么是迭代和递归 递归和迭代都是循环的一种. 简单地说,递归是重复调用函数自身实现循环.迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保 ...
- Bootstrap CSS组组件架构的设计思想
w AO模式 Append Overwrite 附加重写
- point in polygon algorithm
Point-In-Polygon Algorithm — Determining Whether A Point Is Inside A Complex Polygon © 1998,2006,200 ...
- Linux命令(1)——xargs命令
1.功能: xargs能够将stdin中以空格或换行符进行分隔的数据.形成以空格分隔的參数(arguments),传递给其它命令.由于以空格作为分隔符,所以有一些文件名称或者其它意义的名词内含有空格的 ...