zoukankan      html  css  js  c++  java
  • bzoj1603 / P2913 [USACO08OCT]车轮旋转Wheel Rotation

    P2913 [USACO08OCT]车轮旋转Wheel Rotation

    稳妥起见(防止数据出锅),用了bfs

    每次的转移可以直接用异或和解决。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<queue>
     5 #define re register
     6 using namespace std;
     7 void read(int &x){
     8     char c=getchar();x=0;
     9     while(!isdigit(c)) c=getchar();
    10     while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
    11 }
    12 #define N 1002
    13 queue <int> h;
    14 int n,d[N]; bool vis[N];
    15 int cnt,hd[N],nxt[N<<1],ed[N],poi[N<<1],val[N<<1];
    16 void adde(int x,int y,int v){
    17     nxt[ed[x]]=++cnt; hd[x]=hd[x]?hd[x]:cnt;
    18     ed[x]=cnt; poi[cnt]=y; val[cnt]=v;
    19 }
    20 int main(){
    21     read(n); int q1,q2,q3;
    22     for(re int i=1;i<n;++i){
    23         read(q1);read(q2);read(q3);q3^=1;//先取反,便于后面的异或
    24         adde(q1,q2,q3); adde(q2,q1,q3);
    25     } 
    26     h.push(1); d[1]=1; vis[1]=1;
    27     while(!h.empty()){
    28         int x=h.front(); h.pop();
    29         for(int i=hd[x];i;i=nxt[i]){
    30             int to=poi[i];
    31             if(!vis[to]){
    32                 d[to]=d[x]^val[i];
    33                 if(to==n){
    34                     printf("%d",d[n]);
    35                     return 0;
    36                 }
    37                 vis[to]=1;
    38                 h.push(to);
    39             }
    40         }
    41     }
    42 }
    View Code
  • 相关阅读:
    FOJ2250 不可能弹幕结界
    寻找最大值
    Haybale Guessing
    MG loves string
    Curious Cupid
    Anton and Permutation
    TLE
    Jzzhu and Numbers
    Divisible Group Sums
    The merchant
  • 原文地址:https://www.cnblogs.com/kafuuchino/p/9850870.html
Copyright © 2011-2022 走看看