zoukankan      html  css  js  c++  java
  • AtCoder Regular Contest 090 D

     D - People on a Line

    Problem Statement

    There are N people standing on the x-axis. Let the coordinate of Person i be xi. For every i, xi is an integer between 0 and 109 (inclusive). It is possible that more than one person is standing at the same coordinate.

    You will given M pieces of information regarding the positions of these people. The i-th piece of information has the form (Li,Ri,Di). This means that Person Ri is to the right of Person Li by Di units of distance, that is, xRixLi=Di holds.

    It turns out that some of these M pieces of information may be incorrect. Determine if there exists a set of values (x1,x2,…,xN) that is consistent with the given pieces of information.

    Constraints

    • 1≤N≤100 000
    • 0≤M≤200 000
    • 1≤Li,RiN (1≤iM)
    • 0≤Di≤10 000 (1≤iM)
    • LiRi (1≤iM)
    • If ij, then (Li,Ri)≠(Lj,Rj) and (Li,Ri)≠(Rj,Lj).
    • Di are integers.

    Input

    Input is given from Standard Input in the following format:

    N M
    L1 R1 D1
    L2 R2 D2
    :
    LM RM DM
    

    Output

    If there exists a set of values (x1,x2,…,xN) that is consistent with all given pieces of information, print Yes; if it does not exist, print No.


    Sample Input 1

    Copy
    3 3
    1 2 1
    2 3 1
    1 3 2
    

    Sample Output 1

    Copy
    Yes
    

    Some possible sets of values (x1,x2,x3) are (0,1,2) and (101,102,103).


    Sample Input 2

    Copy
    3 3
    1 2 1
    2 3 1
    1 3 5
    

    Sample Output 2

    Copy
    No
    

    If the first two pieces of information are correct, x3x1=2 holds, which is contradictory to the last piece of information.


    Sample Input 3

    Copy
    4 3
    2 1 1
    2 3 5
    3 4 2
    

    Sample Output 3

    Copy
    Yes
    

    Sample Input 4

    Copy
    10 3
    8 7 100
    7 9 100
    9 8 100
    

    Sample Output 4

    Copy
    No
    

    Sample Input 5

    Copy
    100 0
    

    Sample Output 5

    Copy
    Yes
    

    题意:给定有N个人,M条信息。每条信息:L,R,D,表示第R个人在第L个人的右边距离为D。求根据这M条信息判断安排是否成立。
    题解:本来以为可以在线一条一条输入输入信息的同时判断是否合法,好像是不可以。答案说是构成图,然后DFS每一个节点。
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<vector>
     5 #include<cstdio>
     6 using namespace std;
     7 const int maxn = 1e5 + 100;
     8 typedef long long ll;
     9 vector<pair<int, int> > e[maxn];
    10 ll dis[maxn];
    11 bool vis[maxn];
    12 int n, m,flag=0;
    13 
    14 void dfs(int x)
    15 {
    16     vis[x] = 1;
    17     for (int i = 0; i < e[x].size(); i++)
    18     {
    19         pair<int, int> cur=e[x][i];
    20         if (vis[cur.first]) {
    21             if (dis[cur.first] - dis[x] != cur.second) {
    22                 flag = 1; break;
    23             }
    24         }
    25         else {
    26             dis[cur.first] = dis[x] + cur.second;
    27             dfs(cur.first);
    28         }
    29     }
    30 }
    31 
    32 int main()
    33 {
    34     cin >> n >> m;
    35     memset(vis, 0, sizeof(vis));
    36     for (int i = 0; i < m; i++) {
    37         int l, r, d;
    38         cin >> l >> r >> d;
    39         e[l].push_back({ r,d });
    40         e[r].push_back({ l,-d });
    41     }
    42     flag = 0;
    43     for (int i = 0; i <n; i++) {
    44         if (!vis[i]) 
    45             dfs(i);
    46         if (flag) {
    47             break;
    48         }
    49     }
    50     if (flag) {
    51         cout << "No" << endl;
    52     }
    53     else
    54         cout << "Yes" << endl;
    55     return 0;
    56 }


  • 相关阅读:
    基于SVM的数字识别
    Python3 uniform() 函数
    使用贝叶斯分类器从个人广告中获取区域倾向
    logistic回归预测病马死亡率
    python3报错解决办法:TypeError: 'range' object doesn't support item deletion
    python机器学习实战 getA()函数详解
    python中的scatter()方法
    Python split()方法
    Python strip()方法
    贝叶斯垃圾邮件过滤
  • 原文地址:https://www.cnblogs.com/zxhyxiao/p/8393077.html
Copyright © 2011-2022 走看看