比赛 |
20120420 |
评测结果 |
AAAWWWWAWW |
题目名称 |
狙击兵 |
最终得分 |
40 |
用户昵称 |
TBK |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-04-20 11:02:34 |
显示代码纯文本
#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <set>
#include <algorithm>
#define MAXN 0x7fffffff
using namespace std;
int a[501][501],b,c,d,l,m=0,n,s,r[501],k[501],i,j,p,q,u,v;
bool bo[501],boo;
void DFS(int x)
{
int y;
if (boo==false) return;
if (x==b)
{
n=MAXN;
for (y=0;y<m-1;y++) n=n<a[r[y]][r[y+1]]?n:a[r[y]][r[y+1]];
s+=n;
for (y=0;y<m-1;y++)
{
a[r[y]][r[y+1]]-=n;
a[r[y+1]][r[y]]+=n;
}
boo=false;
return;
}
for (y=0;y<=b;y++)
{
if ((a[x][y]!=0)&&(bo[y]==false))
{
bo[y]=true;
r[m]=y;
m++;
DFS(y);
m--;
}
}
}
int main(void)
{
freopen("snipers.in","r",stdin);
freopen("snipers.out","w",stdout);
scanf("%d",&i);
for (j=0;j<i;j++)
{
scanf("%d%d",&b,&q);
for (p=1;p<b;p++) scanf("%d",&k[p]);
k[0]=MAXN/2;
k[b]=MAXN/2;
for (p=0;p<q;p++)
{
scanf("%d%d",&u,&v);
a[u][v]=k[v];
a[v][u]=k[u];
}
while (boo==false)
{
boo=true;
for (c=0;c<=b;c++) bo[c]=false;
m=1;
r[0]=0;
bo[0]=true;
DFS(0);
}
printf("%d\n",s);
}
fclose(stdin);
fclose(stdout);
return 0;
}