| ||||||||||
| 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 | |||||||||
我是按节点最大数102个建的图,麻烦各位大牛帮我看看哪里出问题了。。测试数据没问题但就是WA。。TAT...不胜感激~~~#include <stdio.h>
#include <string.h>
const int MAX = 110;
const int INF = 1000;
bool vis[MAX];
int n, ans, queue[MAX], pre[MAX], map[MAX][MAX];
int min(int x, int y)
{
return x < y ? x : y;
}
bool bfs()
{
int i, u, head, tail;
memset(vis, 0, sizeof(vis));
head = tail = 1;
queue[tail++] = 0;
while (head < tail)
{
u = queue[head++];
for (i = 1; i <= n+1; i++)
if (!vis[i] && map[u][i])
{
pre[i] = u;
vis[i] = true;
queue[tail++] = i;
if (i == n+1)
return true;
}
}
return false;
}
void compute()
{
int i, sum;
sum = INF;
for (i = n+1; i != 0; i = pre[i])
sum = min(sum, map[pre[i]][i]); // 取增广路上最小流量
for (i = n+1; i != 0; i = pre[i])
{
map[pre[i]][i] -= sum;
map[i][pre[i]] += sum;
}
ans += sum;
}
int main()
{
int i, u, t, m, house[1100], mark[1100];
scanf("%d%d", &m, &n);
{
memset(mark, 0, sizeof(mark));
memset(map, 0, sizeof(map));
for (i = 1; i <= m; i++) // 每个猪圈中猪的个数
scanf("%d", &house[i]);
for (i = 1; i <= n; i++) // 消费者
{
scanf("%d", &t);
while (t--)
{
scanf("%d", &u);
if (mark[u] == 0) // 猪圈第一次被打开
map[0][i] += house[u];
else
map[mark[u]][i] = INF;
mark[u] = i;
}
scanf("%d", &map[i][n+1]);
}
ans = 0;
while (bfs())
compute();
printf("%d\n", ans);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator