[bzoj2709][Violet 1]迷宫花园(二分+spfa)
2017-09-29 07:08
465 查看
题目:
我是超链接题解:
二分+spfa,话说这个题目给的样例。。。。中间那么多空行怪不得全给我爆零,连的最大边数要考虑清楚代码:
#include <cstdio> #include <iostream> #include <cstring> #include <queue> #define N 40050 using namespace std; const double eps=1e-7; int n,m,s,t;bool vis ,chan ; int tot,nxt ,point ,v ;double cc ,dis ,L; char st[105][105]; void addline(int x,int y,double z,int fl) { ++tot; nxt[tot]=point[x]; point[x]=tot; v[tot]=y; cc[tot]=z; chan[tot]=fl; ++tot; nxt[tot]=point[y]; point[y]=tot; v[tot]=x; cc[tot]=z; chan[tot]=fl; } bool spfa(double mid) { queue<int>q; for (int i=1;i<=tot;i++) if (chan[i]) cc[i]=mid; memset(vis,0,sizeof(vis)); memset(dis,0x7f,sizeof(dis)); dis[s]=0; q.push(s); while (!q.empty()) { int now=q.front(); q.pop(); vis[now]=0; for (int i=point[now];i;i=nxt[i]) if (dis[v[i]]>dis[now]+cc[i]) { dis[v[i]]=dis[now]+cc[i]; if (!vis[v[i]]) vis[v[i]]=1,q.push(v[i]); } } if (dis[t]<=L) return 1; return 0; } int main() { int T,i,j; scanf("%d",&T); while (T--) { tot=0; memset(point,0,sizeof(point));memset(chan,0,sizeof(chan)); scanf("%lf%d%d\n",&L,&n,&m); for (i=1;i<=n;i++) { gets(st[i]+1); for (j=1;j<=m;j++) if (st[i][j]=='S') s=(i-1)*m+j; else if (st[i][j]=='E') t=(i-1)*m+j; } for (i=1;i<=n;i++) for (j=1;j<=m;j++) if (st[i][j]==' '||st[i][j]=='E'||st[i][j]=='S') { int now=(i-1)*m+j; if (j+1<=m && (st[i][j+1]==' '||st[i][j+1]=='E'||st[i][j+1]=='S')) addline(now,now+1,1,0); if (i+1<=n && (st[i+1][j]==' '||st[i+1][j]=='E'||st[i+1][j]=='S')) addline(now,now+m,0,1); } double l=0,r=10; while (r-l>=eps) { double mid=(l+r)/2.0; if (spfa(mid)) l=mid; else r=mid; } printf("%.5lf\n",l); } }
相关文章推荐
- [BZOJ2709][Violet 1]迷宫花园(二分+spfa)
- BZOJ2709: [Violet 1]迷宫花园 二分+Spfa
- [bzoj2709][Violet 1]迷宫花园 二分+spfa
- bzoj2709 [Violet 1]迷宫花园 二分+spfa
- 【二分答案】【Heap-Dijkstra】bzoj2709 [Violet 1]迷宫花园
- 二分+最短路判定 BZOJ 2709: [Violet 1]迷宫花园
- bzoj 2709: [Violet 1]迷宫花园 (最短路)
- bzoj2709 [Violet 1]迷宫花园
- [BZOJ2709] [Violet 1]迷宫花园
- 2709: [Violet 1]迷宫花园
- [Usaco2007 Dec][BZOJ1690] 奶牛的旅行|分数规划|二分|SPFA
- 【BZOJ4773】负环 [SPFA][二分]
- bzoj1690 [Usaco2007 Dec]奶牛的旅行(最优比率环,二分答案+spfa判负环)
- bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线【二分+spfa】
- BZOJ_1614_ [Usaco2007_Jan]_Telephone_Lines_架设电话线_(二分+最短路_Dijkstra/Spfa)
- 【BZOJ2724】[Violet 6]蒲公英 分块+二分
- bzoj 2285: [Sdoi2011]保密 (二分+SPFA+dinic)
- bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线 二分+spfa
- bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线(二分+SPFA)
- 【bzoj1614】[Usaco2007 Jan]Telephone Lines架设电话线 二分+SPFA