【BZOJ 1415】 [Noi2005]聪聪和可可
来源:互联网 发布:补偿网络 编辑:程序博客网 时间:2024/05/17 23:30
1 #include <cstdio>
2 #include <iostream>
3 #include <cmath>
4 #include <algorithm>
5 #include <cstring>
6 using namespace std;
7
8 int p[1001][1001];
9 double ans[1001][1001];
10 int n,m;
11 int tot,g[1001],nnext[1001*2],num[1001*2];
12 int team[1000000];
13 int d[1001];
14 int head,tail;
15 bool b[1001];
16 void Add(int x,int y)
17 {
18 tot++;
19 nnext[tot]=g[x];
20 g[x]=tot;
21 num[tot]=y;
22 }
23 void SPFA(int t)
24 {
25 while(head<tail)
26 {
27 int x=team[++head]; b[x]=false;
28 for(int i=g[x];i;i=nnext[i])
29 {
30 int tmp=num[i];
31 if(d[tmp]>d[x]+1||(d[tmp]==d[x]+1&&x<p[tmp][t]))
32 {
33 d[tmp]=d[x]+1;
34 p[tmp][t]=x;
35 if(!b[tmp])
36 {
37 team[++tail]=tmp;
38 b[tmp]=true;
39 }
40 }
41 }
42 }
43 }
44
45 double DFS(int x,int y)
46 {
47 // cout<< x<<' '<<y<<endl;
48
49 if(x==y) return 0.0;
50 if(ans[x][y]) return ans[x][y];
51 if(p[x][y]==y)return 1.0;if(p[p[x][y]][y]==y) return 1.0;
52
53 double aa=0;
54 int cnt=0;
55 for(int i=g[y];i;i=nnext[i])
56 aa+=DFS(p[p[x][y]][y],num[i])+1.0,cnt++;
57 aa+=DFS(p[p[x][y]][y],y)+1.0;
58 aa/=(double)(cnt+1);
59 ans[x][y]=aa;
60 return ans[x][y];
61 }
62
63 int main()
64 {
65 cin>>n>>m;int s,t;cin>>s>>t;
66 for(int i=1;i<=m;i++)
67 {
68 int x,y;
69 cin>>x>>y;
70 Add(x,y);
71 Add(y,x);
72 }
73
74 // cout<<"fasfa";
75
76 for(int i=1;i<=n;i++)
77 {
78 memset(d,63,sizeof(d));
79 d[i]=0;
80 head=tail=0;
81 team[++tail]=i;b[i]=true;
82 SPFA(i);
83 }
84
85 // cout<<endl;
86 printf("%.3lf\n",DFS(s,t));
87 return 0;
88 }
2 #include <iostream>
3 #include <cmath>
4 #include <algorithm>
5 #include <cstring>
6 using namespace std;
7
8 int p[1001][1001];
9 double ans[1001][1001];
10 int n,m;
11 int tot,g[1001],nnext[1001*2],num[1001*2];
12 int team[1000000];
13 int d[1001];
14 int head,tail;
15 bool b[1001];
16 void Add(int x,int y)
17 {
18 tot++;
19 nnext[tot]=g[x];
20 g[x]=tot;
21 num[tot]=y;
22 }
23 void SPFA(int t)
24 {
25 while(head<tail)
26 {
27 int x=team[++head]; b[x]=false;
28 for(int i=g[x];i;i=nnext[i])
29 {
30 int tmp=num[i];
31 if(d[tmp]>d[x]+1||(d[tmp]==d[x]+1&&x<p[tmp][t]))
32 {
33 d[tmp]=d[x]+1;
34 p[tmp][t]=x;
35 if(!b[tmp])
36 {
37 team[++tail]=tmp;
38 b[tmp]=true;
39 }
40 }
41 }
42 }
43 }
44
45 double DFS(int x,int y)
46 {
47 // cout<< x<<' '<<y<<endl;
48
49 if(x==y) return 0.0;
50 if(ans[x][y]) return ans[x][y];
51 if(p[x][y]==y)return 1.0;if(p[p[x][y]][y]==y) return 1.0;
52
53 double aa=0;
54 int cnt=0;
55 for(int i=g[y];i;i=nnext[i])
56 aa+=DFS(p[p[x][y]][y],num[i])+1.0,cnt++;
57 aa+=DFS(p[p[x][y]][y],y)+1.0;
58 aa/=(double)(cnt+1);
59 ans[x][y]=aa;
60 return ans[x][y];
61 }
62
63 int main()
64 {
65 cin>>n>>m;int s,t;cin>>s>>t;
66 for(int i=1;i<=m;i++)
67 {
68 int x,y;
69 cin>>x>>y;
70 Add(x,y);
71 Add(y,x);
72 }
73
74 // cout<<"fasfa";
75
76 for(int i=1;i<=n;i++)
77 {
78 memset(d,63,sizeof(d));
79 d[i]=0;
80 head=tail=0;
81 team[++tail]=i;b[i]=true;
82 SPFA(i);
83 }
84
85 // cout<<endl;
86 printf("%.3lf\n",DFS(s,t));
87 return 0;
88 }
0 0
- 【BZOJ 1415】 [Noi2005]聪聪和可可
- BZOJ 1415: [Noi2005]聪聪和可可
- BZOJ 1415: [Noi2005]聪聪和可可|概率dp
- BZOJ 1415 [Noi2005]聪聪和可可【概率dp】
- bzoj 1415 [Noi2005]聪聪和可可 概率dp
- NOI2005 BZOJ 1415聪聪和可可(期望+Floyd)
- [BZOJ 1415][Noi2005]聪聪和可可:期望
- BZOJ 1415: [Noi2005]聪聪和可可 期望dp
- 1415: [Noi2005]聪聪和可可
- 1415: [Noi2005]聪聪和可可
- 【BZOJ】【P1415】【Noi2005】【聪聪和可可】【题解】【期望DP】
- [Noi2005]聪聪和可可
- [Noi2005]聪聪和可可
- NOI2005 : 聪聪和可可
- NOI2005 聪聪和可可
- BZOJ 1415 NOI2005 聪聪和可可 期望DP+记忆化搜索 BZOJ200题达成&&NOI2005全AC达成
- BZOJ 1415 CODE[VS] 1784 [NOI2005 D2T2] 聪聪和可可
- bzoj 1415: [Noi2005]聪聪和可可 (概率与期望)
- 【BZOJ 1095】 [ZJOI2007]Hide 捉迷藏
- 【BZOJ 3144】 [Hnoi2013]切糕
- 【UOJ 34】多项式乘法
- java数据结构 深搜+栈
- 【CodeVS 3123】 高精度练习之超大整数乘法
- 【BZOJ 1415】 [Noi2005]聪聪和可可
- 【BZOJ 2301】 单选错位
- Java String的构造和getByte
- 【BZOJ 1877】 [SDOI2009]晨跑
- KMP模板
- 【BZOJ 1355】 [Baltic2009]Radio Transmission
- 博客开更!!
- 1036: [ZJOI2008]树的统计Count
- UVA 11525 好大好大的排列(线段树)