您的位置:首页 > 其它

POJ 1926 Pollution 直接模拟也能过!!

2012-06-08 10:55 387 查看
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>

using namespace std;

double capcity[105];
const double eps = 1e-5;
int point[105][105];
int n,m;

double Abs(double f)
{
return f>0?f:-f;
}
void solve()
{
while(true)
{
double temp[105];
memset(temp,0,sizeof(temp));
for(int i=0;i<n;i++)
{
if(capcity[i]>eps)
{
if(point[i][0]==0) {temp[i]=capcity[i];}
else
{
double xi = capcity[i]/point[i][0];
for(int j=1;j<=point[i][0];j++)
temp[point[i][j]] += xi;
}
}
}
int i;
for( i=0;i<n;i++)
if(Abs(temp[i]-capcity[i])>eps) break;
if(i==n) break;
for(int i=0;i<n;i++)
capcity[i]= temp[i];
}
for(int i=0;i<n;i++)
printf("%.3lf\n",capcity[i]);
puts("");
}
void init()
{
int test;
scanf("%d",&test);
while(test--)
{
memset(point,0,sizeof(point));

scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%lf",&capcity[i]);
for(int i=0;i<m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
a--,b--;
point[a][0]++,point[a][point[a][0]]=b;
point[b][0]++,point[b][point[b][0]]=a;
}

solve();
}
}
int main()
{
init();
return 0;
}
点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: