• bzoj1603 [Usaco2008 Oct]打谷机


     

    Description

    Farmer John有一个过时的打谷机(收割小麦),它需要带子来带动。发动机驱动轮1总是顺时针旋转的,用来带动转轮2,转轮2来带动转轮3,等等。一共有n(2<=n<=1000)个转轮(n-1条带子)。上面的图解描述了转轮的两种连接方式,第一种方式使得两个轮子旋转的方向相同,第二种则相反。 给出一串带子的信息:*Si—驱动轮 *Di—被动轮 *Ci—连接的类型(0=直接连接,1=交叉连接) 不幸的是,列出的信息是随即的。作为样例,考虑上面的图解,n=4,转轮1是驱动轮,可以得知最后转轮4是逆时针旋转的。

    Input

    *第一行:一个数n *第二行到第n行:每一行有三个被空格隔开的数:Si,Di,Ci

    Output

    *第一行:一个单独的数,表示第n个转轮的方向,0表示顺时针,1表示逆时针。

    Sample Input

    4
    2 3 0
    3 4 1
    1 2 0

    Sample Output

    1

    深搜不解释

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int n,cnt;
    struct edge{
        int to,v,next;
    }e[10000];
    int mark[1010];
    int head[1010];
    void ins(int u,int v,int w)
    {
        e[++cnt].to=v;
        e[cnt].v=w;
        e[cnt].next=head[u];
        head[u]=cnt;
    }
    void insert(int u,int v,int w)
    {
        ins(u,v,w);
        ins(v,u,w);
    }
    void dfs(int now)
    {
        for (int i=head[now];i;i=e[i].next)
        {
            if (mark[e[i].to]==-1)
            {
                if (e[i].v) mark[e[i].to]=mark[now]^1;
                else mark[e[i].to]=mark[now];
                dfs(e[i].to);
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<n;i++)
        {
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            insert(x,y,z);
        }
        for (int i=2;i<=n;i++) mark[i]=-1;
        dfs(1);
        cout<<mark[n]; 
    }
    

      

    ——by zhber,转载请注明来源
  • 相关阅读:
    oracle中 start with .. connect by prior.. 用法简介
    Java中com.jcraft.jsch.ChannelSftp讲解
    linux修改系统时间和linux查看时区、修改时区的方法
    map.containsKey
    Struts2中struts.multipart.maxSize配置
    oracle定时器job的使用
    java的System.getProperty()方法可以获取的值
    夜间模式的开启与关闭,父模板的制作
    开始Flask项目
    完成登录与注册页面的前端
  • 原文地址:https://www.cnblogs.com/zhber/p/4035977.html
Copyright © 2020-2023  润新知