zoukankan      html  css  js  c++  java
  • 【CodeVS4246】奶牛的身高

    Description

       奶牛们在FJ的养育下茁壮成长。这天,FJ给了奶牛Bessie一个任务,去看看每个奶牛场中若干只奶牛的身高,由于Bessie是只奶牛,无法直接看出第i只奶牛的身高,而只能看出第i只奶牛与第j只奶牛的身高差,其中第i 只奶牛与第j只奶牛的身高差为A(i<=n)。当A大于0时表示这只奶牛比前一只奶牛高A cm,小于0时则是低。现在,FJ让Bessie总共去看了m次身高,当然也就传回给FJ m对奶牛的身高差,但是Bessie毕竟是奶牛,有时候眼睛可能会不好使……(大雾)你的任务是帮助FJ来判断是不是需要给Bessie看看眼睛了……

    注:Hj-Hi=A 注意T1的样例 注意注意注意 重要的事情说三遍。

    Input

    第一行为一个正整数w,表示有w组数据,即w个奶牛场,需要你判断。每组数据的第一行为两个正整数n和m,分别表示对应的奶牛场中的奶牛只数以及看了多少个对奶牛身高差。接下来的m行表示Bessie看m次后传回给FJ的m条信息,每条信息占一行,有三个整数s,t和v,表示第s只奶牛与第t只奶牛的身高差为v。

    Output

    包含w行,每行是”Bessie’s eyes are good”或”Bessie is blind.”(不含双引号),其中第i行为”Bessie’s eyes are good”当且仅当第i组数据,即无法从第i个奶牛场传回的身高差判断Bessie视力好不好;第i行为”Bessie is blind.”当且仅当第i组数据,即从第i个奶牛场传回的身高差是有问题的。

    Sample Input

    2

    3 3

    1 3 10

    2 3 5

    1 2 5

    4 3

    1 4 100

    3 4 50

    1 3 100

    Sample Output

    Bessie’s eyes are good

    Bessie is blind.

    HINT

    对于30%的数据,保证n<=100,m<=1000;

    对于100%的数据,保证w<=100,n<=1000,m<=30000,|A|<=30000.

    题解

    #include<iostream>
    #include<cstdio>
    #define N 1010
    using namespace std;
    struct node
    {
        int fa,val;
    }cow[N];
    int T,n,m;
    int root(int x)
    {
        if (cow[x].fa == x) return x;
        int y=cow[x].fa; // fa的值会改变,先记录一下 
        cow[x].fa = root(cow[x].fa);
        cow[x].val = cow[x].val+cow[y].val;
        return cow[x].fa;
    }
    int main()
    {
        int s,t,v,ans;
        scanf("%d",&T);
        for (int I=1;I<=T;I++)
        {
            ans=1;
            scanf("%d%d",&n,&m);
            for (int i=1;i<=n;i++)
            {
                cow[i].fa = i;
                cow[i].val = 0;
            }
            for (int i=1;i<=m;i++)
            {
                scanf("%d%d%d",&s,&t,&v);
                if (!ans) continue;
                if (s == t && v!=0)
                {
                    ans = 0;
                    continue;
                }
                int fx=root(s),fy=root(t);
                if (fx != fy)
                {
                    cow[fx].fa=fy;
                    cow[fx].val=cow[t].val-cow[s].val+v; //算一下 
                }
                else
                {
                    if (cow[t].val+v != cow[s].val)
                        ans=0;
                }
            }    
            if (ans) printf("Bessie's eyes are good
    ");
            else printf("Bessie is blind.
    ");
        }
    }
  • 相关阅读:
    Mathematics:GCD & LCM Inverse(POJ 2429)
    MST:Out of Hay(POJ 2395)
    DP:Cow Exhibition(POJ 2184)(二维问题转01背包)
    《程序员修炼之道——从小工到专家》阅读笔记*part1
    Java课05
    Java课04
    Javaweb课堂测试
    Java课03
    Java课02
    回文判断
  • 原文地址:https://www.cnblogs.com/liumengyue/p/5469283.html
Copyright © 2011-2022 走看看