BZOJ 1603 Usaco2008 Oct 打谷机 DFS

题目大意:给定一棵树,每个点是一个齿轮,1号齿轮顺时针旋转,每条边有同向和反向两种连接方式,求n号齿轮的旋转方向

DFS一遍即可

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 1010
using namespace std;
struct abcd{
    int to,f,next;
}table[M<<1];
int head[M],tot;
int n,f[M];
void Add(int x,int y,int z)
{
    table[++tot].to=y;
    table[tot].f=z;
    table[tot].next=head[x];
    head[x]=tot;
}
void DFS(int x,int from)
{
    int i;
    for(i=head[x];i;i=table[i].next)
        if(table[i].to!=from)
        {
            f[table[i].to]=f[x]^table[i].f;
            DFS(table[i].to,x);
        }
}
int main()
{
    int i,x,y,z;
    cin>>n;
    for(i=1;i<n;i++)
    {
        scanf("%d%d%d",&x,&y,&z);
        Add(x,y,z);Add(y,x,z);
    }
    DFS(1,0);
    cout<<f[n]<<endl;
    return 0;
}
时间: 2024-08-26 17:24:46

BZOJ 1603 Usaco2008 Oct 打谷机 DFS的相关文章

[BZOJ1603] [Usaco2008 Oct] 打谷机

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

bzoj 1602 [Usaco2008 Oct]牧场行走(LCA模板)

1602: [Usaco2008 Oct]牧场行走 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 379  Solved: 216[Submit][Status][Discuss] Description N头牛(2<=n<=1000)别人被标记为1到n,在同样被标记1到n的n块土地上吃草,第i头牛在第i块牧场吃草. 这n块土地被n-1条边连接. 奶牛可以在边上行走,第i条边连接第Ai,Bi块牧场,第i条边的长度是Li(1<=Li<=1

BZOJ 1599: [Usaco2008 Oct]笨重的石子( 枚举 )

直接枚举 ------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define rep( i , n ) for( int i = 0 ;  i < n ; ++i ) #define clr( x ,

BZOJ 1602: [Usaco2008 Oct]牧场行走( 最短路 )

一棵树..或许用LCA比较好吧...但是我懒...写了个dijkstra也过了.. ---------------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<queue> #include<cstring> #include<iostream> #define rep( i ,

BZOJ 1602: [Usaco2008 Oct]牧场行走

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1602 解:lca的模板,我用的是倍增. 程序: #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; struct ding{ int to,next,val; }edge[2010]; int n,q,f[1010][

BZOJ——1602: [Usaco2008 Oct]牧场行走

http://www.lydsy.com/JudgeOnline/problem.php?id=1602 题目描述 N头牛(2<=n<=1000)别人被标记为1到n,在同样被标记1到n的n块土地上吃草,第i头牛在第i块牧场吃草. 这n块土地被n-1条边连接. 奶牛可以在边上行走,第i条边连接第Ai,Bi块牧场,第i条边的长度是Li(1<=Li<=10000). 这些边被安排成任意两头奶牛都可以通过这些边到达的情况,所以说这是一棵树. 这些奶牛是非常喜欢交际的,经常会去互相访问,他们

BZOJ 1601: [Usaco2008 Oct]灌水( MST )

MST , kruskal 直接跑 ---------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<vector> #include<cstring> #include<iostream> #define rep( i , n ) for( int i = 0 ; i <

BZOJ 1600 [Usaco2008 Oct]建造栅栏 DP

题意:链接 方法: DP 解析: 一眼DP题. 四边形好像和三角形没什么大区别,就是三边之和大于另一边就行了. 所以我们可以搞出来最大的边长度不超过多少. 不过好像做这道题的大部分时间我都在梦游? 第一发代码绝壁脑残了 第一发代码居然求出了最大边的上下边界,然后枚举最大边长度跑一个DP. 不过这样是错的. 写完我就发现了=-=梦游简直.. 为什么是错的呢,因为最大边的位置不固定啊-这样转移是搞不出来结果哒. 反正之前都在梦游,想缩复杂度却强行多了个n/4的循环? 所以还是别想太多辣,直接f[i]

BZOJ 1600 Usaco2008 Oct 建造栅栏

题目大意:给定一个长度为n(n≤2500)的木板,要求分成4部分拼成一个面积为正的四边形,求方案数 能拼成一个面积为正的四边形等价于任意一个木板的长度<n2 切割点有3个,前两个枚举,第三个O(1)计算即可 时间复杂度O(n2) #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int n,ans; int