地址: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 2 1
2 1 1
-1
3 2
1 2 1
2 3 1
2 100
1 99
0 98

Source

2017 UESTC Training for Graph Theory
 
思路:
  差分约束。
  求最大值,跑最短路,建一条从v到u权值为w的边。
  求最小值,跑最长路,建一条从u到v权值为-w的边。
  别用vector存边,会T的不省人事,别问我怎么知道的!
 #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 红藕香残玉簟秋,轻解罗裳,独上兰舟。的更多相关文章

  1. 【差分约束系统】【强连通分量缩点】【拓扑排序】【DAG最短路】CDOJ1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。

    题意: 给定n个点(点权未知)和m条信息:u的权值>=v的权值+w 求点权的极小解和极大解(无解则输出-1) 极小解即每个点的点权可能的最小值 极大解即每个点的点权可能的最大值 题解: 差分约束 ...

  2. HTML第二天学习笔记

    今天看视频学习的第一个知识是HTML中的块元素<div>和行内元素<span>. <!doctype html> <html lang="en&qu ...

  3. 算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。

    只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/588 ...

  4. win7系统下的飞秋发送文件失败问题

    飞秋发送文件失败这个问题大多数是由防火墙引起的1.检查windows自带的防火墙设置,在左侧的"允许程序通过windows防火墙"查看飞秋是否存在,不存在则增加之,公网.专网都勾选 ...

  5. wireshake抓包,飞秋发送信息,python

    http://wenku.baidu.com/link?url=Xze_JY8T15pqI9mBLRpTxWF2d6MP-32xb6UwuE6tsUmitRDheJe-Ju87WlDEDBGuI5MF ...

  6. uestc 1073 秋实大哥与线段树 Label:线段树

    秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) “学习本无底, ...

  7. 利用WinPcap模拟网络包伪造飞秋闪屏报文

    起因 不知道从什么时候开始,同事开始在飞秋上发闪屏振动了,后来变本加厉,成了每日一闪.老闪回去也比较麻烦,作为程序猿呢,有没有什么偷懒的办法呢?(同事负责用户体验,不大懂编程).然后尝试了以下思路: ...

  8. Swing做的非阻塞式仿飞秋聊天程序

    采用Swing 布局 NIO非阻塞式仿飞秋聊天程序, 切换皮肤颜色什么的小功能以后慢慢做 启动主程序. 当用户打开主程序后自动获取局域网段IP可以在 设置 --> IP网段过滤, 拥有 JMF ...

  9. 针对局域网IM飞秋(feiq)的开发总结

    先上代码了,通过java代码群发feiq消息: package com.triman.constant; import java.io.IOException; import java.io.Unsu ...

随机推荐

  1. XML基础知识-->Spring配置

    XML的特殊字符 XML中共有5个特殊的字符,分别是:&<>“’.如果配置文件中的注入值包括这些特殊字符,就需要进行特别处理.有两种解决方法:其一,采用本例中的<![CDAT ...

  2. 用Python获取Linux资源信息的三种方法

    方法一:psutil模块 #!usr/bin/env python # -*- coding: utf-8 -*- import socket import psutil class NodeReso ...

  3. Hibernate_day02--课程安排_主键生成策略_对实体类crud操作_实体类对象状态

    Hibernate_day02 上节内容 今天内容 实体类编写规则 Hibernate主键生成策略 实体类操作 对实体类crud操作 添加操作 根据id查询 修改操作 删除操作 实体类对象状态(概念) ...

  4. virtualbox虚拟机Linux系统与本地windows系统共享文件方法

    转自:http://jingyan.baidu.com/article/2fb0ba40541a5900f2ec5f07.html

  5. iOS 文件和数据管理 (可能会删除本地文件储存)

    转自:http://www.apple.com.cn/developer/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgramm ...

  6. SQL:CASE WHEN ELSE END用法

    CASE    WHEN 条件1 THEN 结果1    WHEN 条件2 THEN 结果2    WHEN 条件3 THEN 结果3    WHEN 条件4 THEN 结果4.........    ...

  7. 非IE图片上传预览

    $("#uploadFiles").change(function (e) {                if (e.target.files) {               ...

  8. 移动端form表单

    始终绑定submit事件 不单独的对[提交]按钮绑定click事件,对整个表单绑定submit提交事件,这样可以让整个表单内的文本框获得Enter提交的VIP待遇,并且在移动端中可以让文本框聚焦时键盘 ...

  9. maven仓库加载本地包依赖

    如果有个jar包是我们自己打的,怎么放到maven中呢? 首先在项目里面新建一个lib目录,如果有lib目录则不需要新建,然后放自己的jar包进去,maven的pom.xml配置是: <depe ...

  10. LeetCode-Lowest Common Ancestor of a Binary Tre

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...