UVa 10763 - Foreign Exchange
2013-07-21 11:59
393 查看
题目大意:留学生配对,如果甲想从A去B,乙想从B去A,则甲乙能完成配对。现在给出n个留学生,判断能否完全配对。
最开始考虑用个二维数组维护信息,不过题中数据可达500000,不可能开那么大的二维数组,只好通过排序进行处理了。
View Code
由于写程序时不小心,WA了两次...无语了。看到别人说欧拉回路,考虑节点的入度和出度进行判度,虽然不对但是能AC(效率想必会比上面的提高吧),应该是OJ测试数据没考虑到吧
最开始考虑用个二维数组维护信息,不过题中数据可达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测试数据没考虑到吧
相关文章推荐
- UVA 10763 - Foreign Exchange
- UVA - 10763 Foreign Exchange(vector的使用)
- Foreign Exchange UVA - 10763
- UVA 10763 - Foreign Exchange
- UVA 10763 Foreign Exchange
- uva-10763-Foreign Exchange
- 【UVa】10763 – Foreign Exchange
- UVA 10763 Foreign Exchange 交换学生
- uva 10763 Foreign Exchange
- Foreign Exchange UVA - 10763
- UVa 10763 - Foreign Exchange
- uva 10763 Foreign Exchange
- UVa 10763 Foreign Exchange
- UVA10763 - Foreign Exchange
- UVA - 10763 - Foreign Exchange
- uva 10763
- uva 10763 Foreign Exchange
- UVA 10763 Foreign Exchange
- UVA10763
- UVa 10763 - Foreign Exchange(结构体排序)