您的位置:首页 > Web前端

多维完全背包 USACO 3.3.2 Shopping Offers

2012-07-19 19:22 399 查看
典型多维完全背包

/*
PROG:fence
LANG:C++
*/

#include <cstdio>
#include <algorithm>

using namespace std;

const int MAXN = 501;
int d[MAXN], tot, ans[10000], n, up, down = ~0U>>1;
int a[MAXN][MAXN];

void dfs(int x)
{
for (int i = 1;i <= up;++i)
{
if (a[x][i])
{
--a[x][i], --a[i][x];
dfs(i);
}
}
ans[++tot] = x;
}

int main()
{
freopen("fence.in", "r", stdin);
freopen("fence.out", "w", stdout);
scanf("%d", &n);
int x, y;
for (int i = 1;i <= n;++i)
{
scanf("%d%d", &x, &y);
up = max(x, up), up = max(y, up);
++d[x], ++d[y];
++a[x][y], ++a[y][x];
}
for (int i = 1;i <= up;++i)
{
if (d[i]) down = min(i, down);
if (d[i] & 1) { down = i; break; }
}
dfs(down);
for (int i = tot;i > 0;--i)
printf("%d\n", ans[i]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  up c++