HDU 1824 Let's go home

來源:互聯網
上載者:User

標籤:des   style   blog   color   io   os   ar   java   for   

Let‘s go home

Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1435    Accepted Submission(s): 573


Problem Description小時候,鄉愁是一枚小小的郵票,我在這頭,母親在那頭。
                        —— 余光中

集訓是辛苦的,道路是坎坷的,休息還是必須的。經過一段時間的訓練,lcy決定讓大家回家放鬆一下,但是訓練還是得照常進行,lcy想出了如下回家規定,每一個隊(三人一隊)或者隊長留下或者其餘兩名隊員同時留下;每一對隊員,如果隊員A留下,則隊員B必須回家休息下,或者B留下,A回家。由於今年集訓隊人數突破往年同期最高記錄,管理難度相當大,lcy也不知道自己的決定是否可行,所以這個難題就交給你了,呵呵,好處嘛~,免費**漂流一日。 

 

Input第一行有兩個整數,T和M,1<=T<=1000表示隊伍數,1<=M<=5000表示對數。
接下來有T行,每行三個整數,表示一個隊的隊員編號,第一個隊員就是該隊隊長。
然後有M行,每行兩個整數,表示一對隊員的編號。
每個隊員只屬於一個隊。隊員編號從0開始。 

 

Output可行輸出yes,否則輸出no,以EOF為結束。 

 

Sample Input1 20 1 20 11 2 2 40 1 23 4 50 30 41 31 4 

 

Sample Outputyesno 

 

Author威士忌  題意在題目闡述得很明確 。那麼 , 很確定的是 ,要麼 隊長留下 , 要麼2名隊員留下。 然後對於 t對 隊員 , 不能同時留下, 也不能同時不留下。  可以看出 , 同一隊的兩名非隊長隊員可以看成一個點 , 隊長可以看成一個點 。 然後用 map 把他們的編號映射成一個新的編號 , 然後用新的編號去構圖 。  構出無向邊 u - v 表示 u 與 v 只能有一個成立 。 那麼在dfs 的時候 u 成立 , v^1 就必須成立 。       
#include <iostream>#include <cstdio>#include <cstring>#include <stack>#include <map>using namespace std;const int N = 2010;const int M = 10010;int n , m ;int st[N] , top ;bool mark[N];int eh[N] , et[M] , nxt[M] , tot ;map<int,int>mp;void init(){    mp.clear();    tot = 0 ;    memset( eh , -1 , sizeof eh );    memset( mark , false , sizeof mark );}void addedge( int u , int v ){    et[tot] = v , nxt[tot] = eh[u] , eh[u] = tot ++ ;    et[tot] = u , nxt[tot] = eh[v] , eh[v] = tot ++ ;}bool dfs( int u ){    if( mark[u] ) return true;    if( mark[u^1] ) return false;    mark[u] = true ;    st[top++] = u ;    for( int i = eh[u] ; ~i ; i = nxt[i] ){        int v = et[i];        if( !dfs(v^1) ) return false;    }    return true;}bool solve(){    for(int i = 0 ; i < 2 * n ; i += 2 ){        if( !mark[i] && !mark[i+1] ){            top = 0 ;            if( !dfs(i) ){                while( top > 0 ) mark[ st[--top] ] = false;                if( !dfs(i+1) ) return false ;            }        }    }    return true;}int main(){    #ifdef LOCAL        freopen("in.txt","r",stdin);    #endif // LOCAL    ios::sync_with_stdio(0);    int  x1 , x2 , x3 ;    while( cin >> n >> m  ){        init();        for( int i = 0 ; i < n ; ++i ){            cin >> x1 >> x2 >> x3 ;            mp[x1] = 2 * i ;            mp[x2] = 2 * i + 1 ;            mp[x3] = 2 * i + 1 ;        }        for( int i = 0 ; i < m ; ++i ){            cin >> x1 >> x2 ;            x1 = mp[x1] ;            x2 = mp[x2] ;            addedge( x1 , x2 );        }        if( solve() ) cout << "yes" << endl;        else cout << "no" << endl;    }}

 

 

HDU 1824 Let's go home

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.