HDU-5001 Walk 2014年鞍山网络赛E题
2014-09-13 19:28
204 查看
依次枚举每个不能走过的点,DP递推下一步情况,求出所有其他点的概率之和即为这个点不会被走过的概率。
#include <iostream> #include <cstdio> #include <queue> #include <algorithm> #include <cstring> #include <cmath> #include <queue> #include <iomanip> #include <vector> #define LL long long #define inf 1<<29 using namespace std; struct node { int u,v; int next; }edge[250000]; int n,m,d; int num; int head[55]; int sum[55]; double dp[11111][55]; void addedge(int u,int v) { edge[num].u=u; edge[num].v=v; edge[num].next=head[u]; head[u]=num++; edge[num].u=v; edge[num].v=u; edge[num].next=head[v]; head[v]=num++; } int main() { int t; int u,v; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&d); num=0; memset(head,-1,sizeof(head)); memset(dp,0,sizeof(dp)); memset(sum,0,sizeof(sum)); for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); addedge(u,v); sum[u]++; sum[v]++; } for(int i=1;i<=n;i++) { memset(dp,0,sizeof(dp)); for(int ii=1;ii<=n;ii++) { dp[0][ii]=1.0/n; } for(int j=0;j<d;j++) { for(int l=1;l<=n;l++) { if(dp[j][l]!=0&&l!=i) { int len=sum[l]; double temp=dp[j][l]/len; //cout<<temp<<endl; for(int k=head[l];k!=-1;k=edge[k].next) { int v=edge[k].v; dp[j+1][v]+=temp; } } } } double s=0; for(int j=1;j<=n;j++) { if(j!=i) { s+=dp[d][j]; } } printf("%.9f\n",s); } } return 0; }
相关文章推荐
- HDU 5001 Walk (2014年鞍山赛区网络赛E题)
- HDU 5001 Walk(2014年鞍山赛区网络赛E题)
- HDU 5036 Explosion (2014年北京赛区网络赛E题)
- HDU 5033 Building (2014年北京赛区网络赛B题)
- HDU 5044 Tree (2014年上海赛区网络赛C题)
- HDU 5035 Delivery (2014年北京赛区网络赛D题)
- HDU 5046 Airport (2014年上海赛区网络赛E题)
- HDU 5002 Tree (2014年鞍山赛区网络赛F题)
- HDU 4998 Rotate(计算几何)2014年鞍山赛区网络赛
- HDU 5012 Dice (2014年西安赛区网络赛F题)
- HDU 4998 Rotate (2014年鞍山赛区网络赛B题)
- HDU-5000 Clone 鞍山网络赛D题 DP+猜想
- HDU 5001 Walk(鞍山网络赛E题)
- HDU 5006 Resistance (2014年鞍山赛区网络赛J题)
- HDU_5053_2014年鞍山网络赛
- HDU 5003 Osu! (2014年鞍山赛区网络赛G题)
- HDU 5000 Clone (2014年鞍山赛区网络赛D题)
- HDU 5135 Little Zu Chongzhi's Triangles (2014年广州赛区现场赛I题)
- HDU 5451 Best Solver (2015年沈阳赛区网络赛B题)
- hdu 2014鞍山赛区 5073 Galaxy