| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
刚学了种叫"容器"的东西,拿来写这个题,一直WA,哪位好心人能帮我看一下啊In Reply To:嗯...m的值给的很恶心..... Posted by:FinalLaugh at 2006-12-09 20:30:47 #include <stdio.h>
#include <vector>
using namespace std;
const long MAX_N=100001;
const long long inf=1000001LL;
bool arr[MAX_N];
vector<long> conn[MAX_N];
long long zz[MAX_N];
long n;
long long nowMin,sum;
long long search(long w)
{
long long tot=zz[w];
long long maxBlock=inf;
arr[w]=true;
for (vector<long>::iterator i=conn[w].begin();i!=conn[w].end();i++)
if (!arr[*i])
{
long long tmp=search(*i);
if (tmp>=sum-tmp)
{
if (maxBlock>2*tmp-sum) maxBlock=2*tmp-sum;
}
else
{
if (maxBlock>sum-2*tmp) maxBlock=sum-2*tmp;
}
tot+=tmp;
}
if (tot>=sum-tot)
{
if (maxBlock>2*tot-sum) maxBlock=2*tot-sum;
}
else
{
if (maxBlock>sum-2*tot) maxBlock=sum-2*tot;
}
if (maxBlock<nowMin) nowMin=maxBlock;
return tot;
}
int main()
{
long i,m,a,b,pp;
pp=1;
scanf("%ld%ld",&n,&m);
while (!(n==0&&m==0))
{
for (i=1;i<=n;i++)
conn[i].clear();
sum=0;
for (i=1;i<=n;i++)
{
scanf("%I64d",&zz[i]);
sum=sum+zz[i];
}
for (i=1;i<=m;i++)
{
scanf("%ld%ld",&a,&b);
conn[a].push_back(b);
conn[b].push_back(a);
}
memset(arr,false,sizeof(arr));
nowMin=inf;
search(1);
printf("Case %ld: %I64d\n",pp,nowMin);
pp++;
scanf("%ld%ld",&n,&m);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator