| ||||||||||
| 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 | |||||||||
为何会T#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<utility>
#define mod 1000000007
#define inf 0x3f3f3f3f
using namespace std;
int n, m, a, b, temp, head, tail, t, ans1;
long long sum, ans2;
int w[5010][5010], q[5010], link[5010];
bool vis[5010];
vector<int>v[5010];
bool bfs()
{
head = tail = 0;
q[head++] = 0;
memset(vis, false, sizeof(vis));
vis[0] = true;
while (head != tail)
{
temp = q[tail++];
for (int i = 0; i < v[temp].size(); i++)
{
if (!vis[v[temp][i]] && w[temp][v[temp][i]]>0)
{
link[v[temp][i]] = temp;
if (v[temp][i] == t)
{
return true;
}
vis[v[temp][i]] = true;
q[head++] = v[temp][i];
}
}
}
return false;
}
long long ek()
{
long long s = 0;
int f;
for (;;)
{
if (bfs())
{
f = inf;
temp = t;
while (temp)
{
f = min(f, w[link[temp]][temp]);
temp = link[temp];
}
s += f;
temp = t;
while (temp)
{
w[link[temp]][temp] -= f;
w[temp][link[temp]] += f;
temp = link[temp];
}
}
else
{
return s;
}
}
}
void dfs(int x)
{
vis[x] = true;
ans1++;
for (int i = 0; i < v[x].size(); i++)
{
if (!vis[v[x][i]] && w[x][v[x][i]]>0)
{
dfs(v[x][i]);
}
}
}
int main()
{
scanf("%d%d", &n, &m);
t = n + 1;
sum = 0;
for (int i = 1; i <= n; i++)
{
scanf("%d", &a);
if (a)
{
if (a > 0)
{
w[0][i] = a;
v[0].push_back(i);
v[i].push_back(0);
sum += a;
}
else
{
w[i][t] = -a;
v[i].push_back(t);
v[t].push_back(i);
}
}
}
for (int i = 0; i < m; i++)
{
scanf("%d%d", &a, &b);
if (!w[a][b] && !w[b][a])
{
v[a].push_back(b);
v[b].push_back(a);
}
w[a][b] = inf;
}
ans1 = 0;
ans2 = sum - ek();
memset(vis, false, sizeof(vis));
dfs(0);
printf("%d %lld\n", ans1 - 1, ans2);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator