查看: 1512|回復: 0
打印 上一主題 下一主題

[POJ] 1182 - 食物鏈

[複製鏈接]
  • TA的每日心情
    開心
    2015-4-12 10:09
  • 簽到天數: 137 天

    [LV.7]常住居民III

    142

    主題

    686

    帖子

    3559

    積分

    邁向天堂

    蘇多門

    Rank: 8Rank: 8

    積分
    3559

    新手達陣台南一中資訊社程式設計達人 - 2014

    跳轉到指定樓層
    樓主
    發表於 2014-7-12 17:09:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

    趕快加入我們來參與討論吧!

    您需要 登錄 才可以下載或查看,沒有帳號?加入我們

    x
    本帖最後由 domen111 於 2014-7-12 17:09 編輯

    http://poj.org/problem?id=1182

    AC: http://poj.org/status?problem_id ... 1&result=&language=

    並查集(disjoint set),書裡面的題目,我發現TOJ 89和這題好像

    並查集的陣列(ds)需開N*3的大小
    每種動物建立3個元素: i-A, i-B, i-C,代表i是A或B或C的情況
    unite(i-A, j-B)代表當i為A時,j為B

    注意:
    1. 這題是單筆測資,如果用多測資輸入會WA
    2. 必須使用cstdio,用iostream會TLE

    AC code:
    #include<cstdio>
  • #define lie() {ans++;continue;}
  • using namespace std;
  • int ds[160000];
  • int find(int a)
  • {
  •     if(ds[a]==a)return a;
  •     return ds[a]=find(ds[a]);
  • }
  • inline void unite(int a,int b)
  • {
  •     ds[find(a)]=find(b);
  • }
  • inline bool same(int a,int b)
  • {
  •     return find(a)==find(b);
  • }
  • int main()
  • {
  •     int n,k;
  •     scanf("%d %d",&n,&k);
  •     for(int i=0;i<n*3;i++)
  •         ds[i]=i;
  •     int ans=0;
  •     for(int i=0;i<k;i++)
  •     {
  •         int type,a,b;
  •         scanf("%d %d %d",&type,&a,&b);
  •         a--; b--;
  •         if(a<0 || a>=n || b<0 || b>=n)
  •             lie();
  •         if(type==1)
  •         {
  •             if(same(a,b+n) || same(a,b+n*2))
  •                 lie();
  •             unite(a,b);
  •             unite(a+n,b+n);
  •             unite(a+n*2,b+n*2);
  •         }
  •         else
  •         {
  •             if(same(a,b) || same(a,b+n*2))
  •                 lie();
  •             unite(a,b+n);
  •             unite(a+n,b+n*2);
  •             unite(a+n*2,b);
  •         }
  •     }
  •     printf("%d",ans);
  • }
  • 評分

    參與人數 1金幣 +6 收起 理由
    Sylveon + 6 用cin/cout先天就吃虧 比賽時小心使用.

    查看全部評分

    蘇多門 domen111
    My Web: https://sites.google.com/site/domenprg/
    回復

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表