P1971 [NOI2011]兔兔与蛋蛋游戏
生活随笔
收集整理的這篇文章主要介紹了
P1971 [NOI2011]兔兔与蛋蛋游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
傳送門
思路比較迷……題解在這里
//minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i) #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v) using namespace std; int read(){R int res,f=1;R char ch;while((ch=getchar())>'9'||ch<'0')(ch=='-')&&(f=-1);for(res=ch-'0';(ch=getchar())>='0'&&ch<='9';res=res*10+ch-'0');return res*f; } const int N=105,M=10005; const int dx[]={1,0,-1,0},dy[]={0,1,0,-1}; struct eg{int v,nx;}e[M];int head[M],tot; inline void add(R int u,R int v){e[++tot]={v,head[u]},head[u]=tot;} int id[N][N],vis[M],st[M],match[M];bool ban[M],win[M],mp[N][N]; int n,m,tim,top,cnt,q,bx,by;char s[N]; bool find(int u){if(ban[u])return 0;go(u){if(vis[v]==tim||ban[v])continue;vis[v]=tim;if(!match[v]||find(match[v])){match[u]=v,match[v]=u;return 1;}}return 0; } int main(){ // freopen("testdata.in","r",stdin);n=read(),m=read();fp(i,1,n){scanf("%s",s+1);fp(j,1,m)switch(s[j]){case 'X':mp[i][j]=1;break;case 'O':mp[i][j]=0;break;case '.':mp[i][j]=1,bx=i,by=j;break;}}fp(i,1,n)fp(j,1,m)id[i][j]=++cnt;fp(i,1,n)fp(j,1,m)if(mp[i][j])fp(k,0,3){int x=i+dx[k],y=j+dy[k];if(x>=1&&x<=n&&y>=1&&y<=m&&!mp[x][y])add(id[i][j],id[x][y]),add(id[x][y],id[i][j]);}fp(i,1,n)fp(j,1,m)if(mp[i][j])++tim,find(id[i][j]);q=read();fp(i,1,(q<<1)){int x=id[bx][by];ban[x]=1;if(match[x]){int y=match[x];match[x]=match[y]=0;++tim,win[i]=!find(y);}bx=read(),by=read();}fp(i,1,q)if(win[(i<<1)-1]&&(win[i<<1]))st[++top]=i;printf("%d\n",top);fp(i,1,top)printf("%d\n",st[i]);return 0; }轉載于:https://www.cnblogs.com/bztMinamoto/p/10139933.html
總結
以上是生活随笔為你收集整理的P1971 [NOI2011]兔兔与蛋蛋游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle DMP 导入导出
- 下一篇: 计算机中级职称考试答题卡,2016年软考