Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 266 Accepted Submission(s): 183 Special Judge
1 #include<iostream> 2 #include<cstring> 3 #include<cstdlib> 4 #include<cstdio> 5 #include<algorithm> 6 #include<cmath> 7 #include<queue> 8 #include<map> 9 #include<string> 10 11 #define N 55 12 #define M 15 13 #define mod 1000000007 14 #define p 10000007 15 #define mod2 100000000 16 #define ll long long 17 #define LL long long 18 #define maxi(a,b) (a)>(b)? (a) : (b) 19 #define mini(a,b) (a)<(b)? (a) : (b) 20 21 using namespace std; 22 23 int T; 24 int n,m,d; 25 vector<int>bian[N]; 26 int cnt[N]; 27 double dp[10005][N]; 28 double re; 29 30 void ini() 31 { 32 int i; 33 int x,y; 34 memset(cnt,0,sizeof(cnt)); 35 scanf("%d%d%d",&n,&m,&d); 36 for(i=1;i<=n;i++){ 37 bian[i].clear(); 38 } 39 while(m--){ 40 scanf("%d%d",&x,&y); 41 bian[x].push_back(y); 42 bian[y].push_back(x); 43 } 44 for(i=1;i<=n;i++){ 45 cnt[i]=bian[i].size(); 46 } 47 } 48 49 void solve() 50 { 51 int q,o,i; 52 for(q=1;q<=n;q++) 53 { 54 re=0; 55 memset(dp,0,sizeof(dp)); 56 for(i=1;i<=n;i++){ 57 if(i==q) continue; 58 dp[0][i]=1.0/n; 59 } 60 61 for(o=1;o<=d;o++){ 62 for(i=1;i<=n;i++){ 63 if(i==q) continue; 64 for(vector<int>::iterator it=bian[i].begin();it!=bian[i].end();it++){ 65 dp[o][i]+=dp[o-1][*it]/cnt[*it]; 66 } 67 } 68 } 69 70 for(i=1;i<=n;i++){ 71 if(i==p) continue; 72 re+=dp[d][i]; 73 } 74 printf("%.10f\n",re); 75 } 76 } 77 78 void out() 79 { 80 //printf("%I64d\n",ans); 81 } 82 83 int main() 84 { 85 //freopen("data.in","r",stdin); 86 scanf("%d",&T); 87 //for(int cnt=1;cnt<=T;cnt++) 88 while(T--) 89 //while(scanf("%I64d%I64d",&n,&m)!=EOF) 90 { 91 ini(); 92 solve(); 93 // out(); 94 } 95 96 return 0; 97 }
原文:http://www.cnblogs.com/njczy2010/p/3972154.html