zoukankan      html  css  js  c++  java
  • 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 之间的整数。

    1n1000001≤n≤100000,1m10000001≤m≤1000000,1u1≤u 、vnv≤n,0w1000≤w≤100 。

    Output

    若老师给出的信息有误,仅输出一行 1−1 。

    否则输出 nn 行,第 ii 行为以空格隔开的两个整数,分别表示编号为 ii 的学生的分数可能的 最小值 和 最大值 。

    Sample input and output

    Sample InputSample 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的不省人事,别问我怎么知道的!
     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 #define MP make_pair
     6 #define PB push_back
     7 typedef long long LL;
     8 typedef pair<int,int> PII;
     9 const double eps=1e-8;
    10 const double pi=acos(-1.0);
    11 const int K=1e6+7;
    12 const int mod=1e9+7;
    13 
    14 struct node
    15 {
    16     int to,v,next;
    17     node(){}
    18     node(int x,int y,int z){to=x,v=y,next=z;}
    19 }eg1[2*K],eg2[2*K];
    20 int t1,t2,hd1[K],hd2[K];
    21 void add(int u,int v,int w,int op)
    22 {
    23     if(op&1)
    24         eg1[t1]=node(v,w,hd1[u]),hd1[u]=t1++;
    25     else
    26         eg2[t2]=node(v,w,hd2[u]),hd2[u]=t2++;
    27 }
    28 int n,m,cnt[K],inque[K],mx[K],mi[K],Q[K];
    29 bool spfa1(void)
    30 {
    31     int top=0;
    32     memset(mi,-1,sizeof mi);
    33     Q[top++]=0,inque[0]=1,cnt[0]=1,mi[0]=0;
    34     while(top)
    35     {
    36         int u=Q[--top];
    37         inque[u]=0;
    38         for(int i=hd1[u];~i;i=eg1[i].next)
    39         {
    40             int v=eg1[i].to,w=eg1[i].v;
    41             if(mi[v]<mi[u]+w)
    42             {
    43                 mi[v]=mi[u]+w;
    44                 if(inque[v]) continue;
    45                 if(cnt[v]>n) return 0;
    46                 Q[top++]=v,inque[v]=1,cnt[v]++;
    47             }
    48 
    49         }
    50     }
    51     return 1;
    52 }
    53 bool spfa2(void)
    54 {
    55     int top=0;
    56     memset(inque,0,sizeof inque);
    57     memset(cnt,0,sizeof cnt);
    58     memset(mx,0x3f3f3f3f,sizeof mx);
    59     Q[top++]=0,inque[0]=1,cnt[0]=1,mx[0]=100;
    60     while(top)
    61     {
    62         int u=Q[--top];
    63         inque[u]=0;
    64         for(int i=hd2[u];~i;i=eg2[i].next)
    65         {
    66             int v=eg2[i].to,w=eg2[i].v;
    67             if(mx[v]>mx[u]+w)
    68             {
    69                  mx[v]=mx[u]+w;
    70                 if(inque[v]) continue;
    71                 if(cnt[v]>n) return 0;
    72                 Q[top++]=v,inque[v]=1,cnt[v]++;
    73             }
    74         }
    75     }
    76     for(int i=1;i<=n;i++)
    77     if(min(mi[i],mx[i])<0||max(mx[i],mi[i])>100)
    78         return 0;
    79     return 1;
    80 }
    81 int main(void)
    82 {
    83     memset(hd1,-1,sizeof hd1);
    84     memset(hd2,-1,sizeof hd2);
    85     scanf("%d%d",&n,&m);
    86     for(int i=1,u,v,w;i<=m;i++)
    87         scanf("%d%d%d",&u,&v,&w),add(v,u,w,1),add(u,v,-w,2);
    88     for(int i=1;i<=n;i++)
    89         add(0,i,0,1),add(0,i,0,2);
    90     if(spfa1()&&spfa2())
    91         for(int i=1;i<=n;i++)
    92             printf("%d %d
    ",mi[i],mx[i]);
    93     else
    94         printf("-1
    ");
    95     return 0;
    96 }
  • 相关阅读:
    搜索回车跳转页面
    登录验证码
    【排序算法】排序算法之插入排序
    PAT 乙级 1044 火星数字 (20 分)
    PAT 甲级 1035 Password (20 分)
    PAT 甲级 1041 Be Unique (20 分)
    PAT 甲级 1054 The Dominant Color (20 分)
    PAT 甲级 1027 Colors in Mars (20 分)
    PAT 甲级 1083 List Grades (25 分)
    PAT 甲级 1005 Spell It Right (20 分)
  • 原文地址:https://www.cnblogs.com/weeping/p/6973419.html
Copyright © 2011-2022 走看看