CodeForces 48E
来源:互联网 发布:网络通信协议种类 编辑:程序博客网 时间:2024/05/29 07:55
最短路+有向图找环
#include<cstdio>#include<iostream>#include<cstring>#include<queue>using namespace std;const int INF=0x3f3f3f3f;const int N=220;const int M=N*N*N;struct Edge{ int v,next; Edge(){} Edge(int v,int next):v(v),next(next){}}e[M*2];int head[N*N],total;void init(){ memset(head,-1,sizeof(head));total=0;}void adde(int u,int v){ e[total]=Edge(v,head[u]);head[u]=total++;}int mp[N][N];int dis[N*N];queue<int> qq;int sou(int s,int t){ memset(dis,0x3f,sizeof(dis)); dis[mp[s][t]]=0; qq.push(mp[s][t]); while(!qq.empty()){ int u=qq.front();qq.pop(); for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].v; if(dis[v]>dis[u]+1){ dis[v]=dis[u]+1; qq.push(v); } } } return dis[mp[0][0]]<INF;}int vis[N*N];void sou1(int s,int t){ memset(dis,0,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[mp[s][t]]=0;vis[mp[s][t]]=1; qq.push(mp[s][t]); while(!qq.empty()){ int u=qq.front();qq.pop(); vis[u]=0; for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].v; if(dis[v]<dis[u]+1){ dis[v]=dis[u]+1; if(!vis[v]){ vis[v]=1;qq.push(v); } } } }}int dfs(int u){ vis[u]=2; for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].v; if(vis[v]){ if(vis[v]==2)return 1; } else if(dfs(v)){ return 1; } } vis[u]=1; return 0;}int H,T,R,cnt;int fun(int i,int j,int ii,int jj){ //printf("%d %d %d %d\n",i,j,ii,jj); if(ii+jj>R){ adde(mp[i][j],cnt); } else { adde(mp[i][j],mp[ii][jj]); }}int aa[N*2],bb[N*2];int main(){ #ifdef DouBi freopen("in.cpp","r",stdin); #endif // DouBI while(scanf("%d%d%d",&H,&T,&R)!=EOF){ int n;scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d%d",&aa[i],&bb[i]); } int m;scanf("%d",&m); for(int i=1;i<=m;i++){ scanf("%d%d",&aa[i+n],&bb[i+n]); } cnt=0; for(int i=0;i<=R;i++){ for(int j=0;j<=R-i;j++){ mp[i][j]=cnt++; } } init(); for(int i=0;i<=R;i++){ for(int j=0;j<=R-i;j++){ for(int k=1;k<=n&&k<=i;k++){ int ii=i-k+aa[k],jj=j+bb[k]; fun(i,j,ii,jj); } for(int k=1;k<=m&&k<=j;k++){ int ii=i+aa[n+k],jj=j-k+bb[n+k]; fun(i,j,ii,jj); } } } if(sou(H,T)){ printf("Ivan\n"); printf("%d\n",dis[mp[0][0]]); continue; } memset(vis,0,sizeof(vis)); if(dfs(mp[H][T])){ printf("Draw\n"); continue; } sou1(H,T); printf("Zmey\n"); printf("%d\n",dis[cnt]); } return 0;}
0 0
- CodeForces 48E
- CodeForces 48E
- codeforces 163E e-Government
- 【Codeforces 163E】E-Government
- Codeforces 78E Evacuation
- 【dp】codeforces 83E
- Codeforces 124 E
- Codeforces 231E
- Codeforces 231E - Cactus
- Codeforces #163 Div2 E
- codeForces 35E
- Codeforces 35E
- Playlist codeforces 268E
- Codeforces 148E(Porcelain)
- codeforces round#177 E
- codeforces 203E Transportation
- CodeForces 254 E Dormitory
- codeforces日记371e
- 第14周项目1-(1)验证折半查找算法
- [Linux笔记003]:linux中图像格式转换
- android studio svn检出、提交代码时一直弹出输入svn用户信息
- [Linux笔记004]:cuda7.5在双显卡笔记本上deb安装
- Codeforces Round #382 (Div. 2) D. Taxes
- CodeForces 48E
- POJ1988带权并查集
- UDP网络编程如何减少丢包
- jquery cookies"今日不在提示"
- JPEG文件编/解码详解
- [Linux笔记005]:LevelDB Lock和杀掉进程
- 使用librtmp进行H264与AAC直播
- 第十三周项目5-拓扑排序算法验证
- linux下安装FastDFS