poj 1926 Pollution
2012-04-10 20:29
218 查看
题目链接:http://poj.org/problem?id=1926
题目思路:对每个连通分量按度均分即可。这次很快就想到了解法,不错!
题目思路:对每个连通分量按度均分即可。这次很快就想到了解法,不错!
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<string> #include<queue> #include<algorithm> #include<vector> #include<stack> #include<list> #include<iostream> #include<map> using namespace std; #define inf 0x3f3f3f3f #define Max 110 int max(int a,int b) { return a>b?a:b; } int min(int a,int b) { return a<b?a:b; } int eid,p[110],du[110],rec[110],sumdu,cnt,vst[110]; double sum,c[110]; double ans[110]; struct node { int to,next; }e[20200]; inline void addedge(int u,int v) { e[eid].to=v; e[eid].next=p[u]; p[u]=eid++; } void dfs(int u) { int i; rec[cnt++]=u; vst[u]=1; sum+=c[u],sumdu+=du[u]; for(i=p[u];i!=-1;i=e[i].next) { int v=e[i].to; if(vst[v]) continue; dfs(v); } } int main() { int t,n,m,u,v,i,j; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(du,0,sizeof(du)); memset(vst,0,sizeof(vst)); memset(p,-1,sizeof(p)); for(i=1;i<=n;i++) scanf("%lf",&c[i]); for(i=1;i<=m;i++) { scanf("%d%d",&u,&v); du[u]++;du[v]++; addedge(u,v); addedge(v,u); } for(i=1;i<=n;i++) { sum=0;sumdu=0; cnt=0; if(!vst[i]) { dfs(i); for(j=0;j<cnt;j++) { if(sumdu==0) { ans[rec[j]]=sum; continue; } ans[rec[j]]=sum*du[rec[j]]/sumdu; } } } for(i=1;i<=n;i++) printf("%.3lf\n",ans[i]); puts(""); } }
相关文章推荐
- Poj 1926 Pollution
- (待切)POJ 1926 Pollution 模拟/并查集
- POJ 1926 Pollution
- POJ-1926 Pollution
- poj 1926 Pollution 并查集解决污染计算问题
- POJ-1926 Pollution
- POJ 1926 Pollution 直接模拟也能过!!
- zoj 1926 || poj 2328 Guessing Game(水~)
- TOJ 1926 POJ 1548 Robots 贪心 水题 C语言
- poj 1926 All in all
- poj 3627 Bookshelf(水~)
- POJ1273 Drainage Ditches——最大流
- POJ-1149 参考大牛的构图..
- POJ 2342 Anniversary party
- POJ 3253(Fence Repair)
- poj 1050 To the Max 求矩阵中局部矩形区域和最大值
- POJ 1836 Alignment
- poj 1698 Alice's Chance 最大流
- POJ1178 Camlot
- [ACM] poj 3468 A Simple Problem with Integers(线段树,成段更新,懒惰标记)