CodeForces 48E
来源:互联网 发布:淘宝金店可以买吗 编辑:程序博客网 时间:2024/05/29 08:06
最短路
最长路
有向图找环
#include<cstdio>#include<iostream>#include<cstring>#include<queue>using namespace std;const int N=440;const int INF=0x3f3f3f3f;int aa[N],bb[N];int dp[N][N];queue<int> qq;int h,t,R,n,m;void spfa(int s1,int s2){ memset(dp,0x3f,sizeof(dp)); dp[s1][s2]=0;qq.push(s1);qq.push(s2); while(!qq.empty()){ int u=qq.front();qq.pop(); int u1=qq.front();qq.pop(); //printf("%d %d\n",u,u1); for(int i=1;i<=n&&i<=u;i++){ int v=u-i+aa[i],v1=u1+bb[i]; if(v+v1>R){ continue; } if(dp[v][v1]>dp[u][u1]+1){ dp[v][v1]=dp[u][u1]+1; qq.push(v);qq.push(v1); } } for(int i=1;i<=m&&i<=u1;i++){ int v=u+aa[n+i],v1=u1-i+bb[n+i]; if(v+v1>R)continue; if(dp[v][v1]>dp[u][u1]+1){ dp[v][v1]=dp[u][u1]+1; qq.push(v);qq.push(v1); } } }}int vis[N][N];int dfs(int u,int v){ vis[u][v]=2; for(int i=1;i<=n&&i<=u;i++){ int uu=u-i+aa[i],vv=v+bb[i]; if(uu+vv>R)continue; if(!vis[uu][vv]){ if(dfs(uu,vv))return 1; } else if(vis[uu][vv]==2){ return 1; } } for(int i=1;i<=m&&i<=v;i++){ int uu=u+aa[n+i],vv=v-i+bb[n+i]; if(uu+vv>R)continue; if(!vis[uu][vv]){ if(dfs(uu,vv))return 1; } else if(vis[uu][vv]==2){ return 1; } } vis[u][v]=1; return 0;}int ans;void spfa1(int s1,int s2){ memset(dp,0,sizeof(dp)); memset(vis,0,sizeof(vis)); dp[s1][s2]=0;vis[s1][s2]=1; qq.push(s1);qq.push(s2); while(!qq.empty()){ int u=qq.front();qq.pop(); int u1=qq.front();qq.pop(); vis[u][u1]=0; for(int i=1;i<=n&&i<=u;i++){ int v=u-i+aa[i],v1=u1+bb[i]; if(v+v1>R){ ans=max(ans,dp[u][u1]+1); continue; } if(dp[v][v1]<dp[u][u1]+1){ dp[v][v1]=dp[u][u1]+1; if(!vis[v][v1]){ vis[v][v1]=1; qq.push(v);qq.push(v1); } } } for(int i=1;i<=m&&i<=u1;i++){ int v=u+aa[n+i],v1=u1-i+bb[n+i]; if(v+v1>R){ ans=max(ans,dp[u][u1]+1); continue; } if(dp[v][v1]<dp[u][u1]+1){ dp[v][v1]=dp[u][u1]+1; if(!vis[v][v1]){ vis[v][v1]=1; qq.push(v);qq.push(v1); } } } }}int main(){ #ifdef DouBi freopen("in.cpp","r",stdin); #endif // DouBi while(scanf("%d%d%d",&h,&t,&R)!=EOF){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d%d",&aa[i],&bb[i]); } scanf("%d",&m); for(int i=1;i<=m;i++){ scanf("%d%d",&aa[n+i],&bb[n+i]); } spfa(h,t); if(dp[0][0]!=INF){ printf("Ivan\n"); printf("%d\n",dp[0][0]); continue; } memset(vis,0,sizeof(vis)); if(dfs(h,t)){ printf("Draw\n"); continue; } ans=0; spfa1(h,t); printf("Zmey\n"); printf("%d\n",ans); } 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
- Android横竖屏切换数据保存的方法以及onSaveInstanceState() 的实现
- 莫斯科地铁交通图
- 构建者模式-Builder、Director、Product
- 手机号码检测开通微信方法
- 《Effective C++(第三版)》读书笔记
- CodeForces 48E
- android Makefile(Android.mk)解析
- asp 简单的事务的使用
- ios升级https记录
- Http协议详解
- ShareSDK安装了微信QQ一直报错未安装客户端
- 使用javamail技术实现后台邮件发送功能
- 【Android 基础】Animation 动画介绍和实现
- Android的对称加密与Base64加密