Poj 1926 Pollution
2011-06-11 15:41
375 查看
//这道题目很简单,矩阵相乘即可,只是在精度上要控制好
//虽然简单却暴露了自己是多么马虎,以此为戒吧 :(
//1.首先是sizeof问题(代码中有标明),2.然后是看题,比如说这组数据:
1
3 2
1
2
0.6
2 3
1 2
它是不能平衡的,,但是题目说一定会保证input数据都能平衡
3.最后就是致命的,,忘了孤立点的事情!,,蛋蛋疼!
//虽然简单却暴露了自己是多么马虎,以此为戒吧 :(
//1.首先是sizeof问题(代码中有标明),2.然后是看题,比如说这组数据:
1
3 2
1
2
0.6
2 3
1 2
它是不能平衡的,,但是题目说一定会保证input数据都能平衡
3.最后就是致命的,,忘了孤立点的事情!,,蛋蛋疼!
#include <iostream> #include <queue> #include <stack> #include <string> #include <map> #include <vector> #include <cstring> #include <cstdio> #include <cmath> #include <algorithm> using namespace std; const int MAX=105,INF=1<<30; int n,m,di; bool g[MAX][MAX]; double tank[MAX],mat[MAX][MAX],odd[MAX][MAX], I[MAX][MAX]; int d[MAX]; inline void mul (double m1[MAX][MAX],double m2[MAX][MAX]){ double ans[MAX][MAX]; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ ans[i][j]=0; for(int k=0;k<n;k++){ ans[i][j]+=m1[i][k]*m2[k][j]; } } } memcpy(m1,ans,sizeof(double)*MAX*MAX);//不能sizeof(m1), //因为它在函数里面只是一个指针 return ; } void Pow(double a[MAX][MAX],int k){ memcpy(odd,I,sizeof(odd)); while(k){ if(k&1) mul(odd,a); mul(a,a); k>>=1; } return ; } int main() { #ifndef ONLINE_JUDGE freopen("i.txt", "r", stdin); //freopen("e://t1.txt", "w", stdout); #endif int T,u,v; double ans[MAX]; cin>>T; memset(I,0,sizeof(I)); for(int i=0;i<MAX;i++) I[i][i]=1.0; while(T--){ memset(g,0,sizeof(g)); memset(d,0,sizeof(d)); memset(mat,0,sizeof(mat)); cin>>n>>m; for(int i=0;i<n;i++) cin>>tank[i]; for(int i=0;i<m;i++){ cin>>u>>v; --u; --v; g[u][v]=1; g[v][u]=1; } for(int i=0;i<n;i++){ di=0; for(int j=0;j<n;j++){ if(g[i][j]) ++di; } d[i]=di; if(!di) continue; for(int j=0;j<n;j++){ if(g[i][j]){ mat[i][j]=1/(double)di; } } } Pow(mat,2*m*m); memset(ans,0,sizeof(ans)); for(int j=0;j<n;j++){ for(int k=0;k<n;k++){ ans[j]+=tank[k]*odd[k][j]; } } for(int i=0;i<n;i++){ if(d[i]) printf("%.3lf/n",ans[i]); else printf("%.3lf/n",tank[i]); } printf("/n"); } return 0; }
相关文章推荐
- POJ-1926 Pollution
- poj 1926 Pollution 并查集解决污染计算问题
- POJ 1926 Pollution 直接模拟也能过!!
- POJ 1926 Pollution
- poj 1926 Pollution
- (待切)POJ 1926 Pollution 模拟/并查集
- POJ-1926 Pollution
- poj 1926 All in all
- zoj 1926 || poj 2328 Guessing Game(水~)
- TOJ 1926 POJ 1548 Robots 贪心 水题 C语言
- POJ 3368 Frequent values(线段树+离散化)
- 【POJ 1964】求10图矩形最大面积
- POJ-3481 维护单调链表
- POJ 3294 Life Forms 二分 + 哈希
- poj1016--字符串处理
- poj 1861
- POJ_2993_Emag eht htiw Em Pleh(模拟)
- poj 3420 dp+矩阵(矩形填充)
- poj 2240 Arbitrage (最短路径)
- POJ 1611 The Suspects