題意:
給定一個圖,兩個人從起點出發,輪流開飛機,當離開這個點後這個點
就不能使用了,如果輪到誰了誰不能飛了就輸了。
必敗狀態很好找,當一個人在位置s的時候與這個點相連的沒有點能用的
時候則必敗。然後數據很小,直接暴力搜索就可以AC。
代碼如下:
#include #include #include #include #include #include #include #include #define PB push_back #define MP make_pair #define REP(i,n) for(int i=0;i<(n);++i) #define FOR(i,l,h) for(int i=(l);i<=(h);++i) #define DWN(i,h,l) for(int i=(h);i>=(l);--i) #define IFOR(i,h,l,v) for(int i=(h);i<=(l);i+=(v)) #define CLR(vis) memset(vis,0,sizeof(vis)) #define MST(vis,pos) memset(vis,pos,sizeof(vis)) #define MAX3(a,b,c) max(a,max(b,c)) #define MAX4(a,b,c,d) max(max(a,b),max(c,d)) #define MIN3(a,b,c) min(a,min(b,c)) #define MIN4(a,b,c,d) min(min(a,b),min(c,d)) #define PI acos(-1.0) #define INF 1000000000 #define LINF 1000000000000000000LL #define eps 1e-8 #define LL long long using namespace std; const int maxn = 1001; int mp[maxn][maxn]; bool vis[maxn]; int ans,n,s; bool dfs(int id){ FOR(i,1,n){www.sohu.com if(mp[id][i]&&!vis[i]){//遍歷圖的順序確保了答案最小 vis[id]=1; if(!dfs(i)){ vis[id]=0; ans=i; return true; } } vis[id]=0; } return false; } int main(){ while(~scanf(%d%d,&n,&s)){ CLR(mp); REP(i,n-1){ int u,v; scanf(%d%d,&u,&v); mp[u][v]=1; mp[v][u]=1; } CLR(vis); if(dfs(s)) printf(First player wins flying to airport %d ,ans); else puts(First player loses); } return 0; }
題目:Given an integer n, generat
記得剛接觸代理,是在大話設計模式,最近在技術總結
題目傳送:BestCoder Round #41
一個程序要想執行,總是要加載到內存裡面的,為此
作用:保證一個類僅有一個實例,並提供一個訪問它
作用:將對象組合成樹形結構以表示“