您的位置:首页 > 其它

UVa 10763 - Foreign Exchange

2013-07-21 11:59 393 查看
  题目大意:留学生配对,如果甲想从A去B,乙想从B去A,则甲乙能完成配对。现在给出n个留学生,判断能否完全配对。

  最开始考虑用个二维数组维护信息,不过题中数据可达500000,不可能开那么大的二维数组,只好通过排序进行处理了。

#include <cstdio>
#include <algorithm>
#define MAXN 500000+10
using namespace std;

struct Route
{
int s, e;
};

Route go[MAXN], back[MAXN];

bool cmp(const Route &a, const Route &b)
{
if (a.s != b.s)   return a.s < b.s;
return a.e < b.e;
}

int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int n;
while (scanf("%d", &n) != EOF && n)
{
int g_cnt = 0, b_cnt = 0;
for (int i = 0; i < n; i++)
{
int x, y;
scanf("%d%d", &x, &y);
if (x < y)
{
go[g_cnt].s = x;
go[g_cnt].e = y;
g_cnt++;
}
else
{
back[b_cnt].s = y;
back[b_cnt].e = x;
b_cnt++;
}
}
if (g_cnt != b_cnt)
{
printf("NO\n");
continue;
}
sort(go, go+g_cnt, cmp);
sort(back, back+b_cnt, cmp);
bool yes = true;
for (int i = 0; i < g_cnt; i++)
if (go[i].s != back[i].s || go[i].e != back[i].e)
{
yes = false;
break;
}
if (yes)   printf("YES\n");
else printf("NO\n");
}
return 0;
}


View Code
  由于写程序时不小心,WA了两次...无语了。看到别人说欧拉回路,考虑节点的入度和出度进行判度,虽然不对但是能AC(效率想必会比上面的提高吧),应该是OJ测试数据没考虑到吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: