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 |
哪位路过的大牛帮帮看一下wa代码吧,谢谢⋯⋯#include <bitset> #include <map> #include <queue> #include <string.h> #include <stdio.h> #include <string> #include <iostream> using namespace std; #define N 50010 int py[N]; int dr[N];//dr[i]: i的敌人是dr[i],即dr[i]吃i int n; int find(int x)//找到祖先 { int r = x; while (py[r] != r) { r = py[r]; } int t = x; while (py[t] != r) { py[t] = t; } return r; } int guanxi(int x, int y) { int rx = find(x); int ry = find(y); if (rx == ry) return 1;//朋友 else if (dr[rx] != -1 || dr[ry] != -1)//非朋友 { if (dr[rx] == ry)//ry吃rx { return 3;//x是y的食物 } else { return 2;//y是x的食物 } } else return 0;//没有关系 } void update(int r, int x, int y) { int rx = find(x); int ry = find(y); switch (r) { case 1: if (rx < ry) { py[ry] = rx; } break; case 2: dr[ry] = rx;//rx吃ry if (dr[rx] != -1)//rx有敌人 { dr[dr[rx]] = ry; } break; } } int f(int r, int x, int y) { if (r == 2 && x == y || x > n || y > n) return 0; int gx = guanxi(x,y); if (gx == 0)//没有关系 { update(r,x,y); return 1; } switch (r) { case 1: if (gx == 1) return 1; else return 0; case 2: if (gx == 2) return 1; else return 0; default: return 0; } } int main() { //freopen("\tmp\acm\test.txt","r",stdin); int cas, res = 0, r, x, y; scanf("%d%d", &n, &cas); for (int i = 1; i <= n; ++ i) py[i] = i, dr[i] = -1;//初始化 while (cas --) { scanf("%d%d%d", &r, &x, &y); bool b = f(r,x,y); if (!b) ++ res; //printf("\t\t%d\n", b); } printf("%d\n", res); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator