Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 6595 | Accepted: 2562 |
Description
Input
Output
Sample Input
10 5 1 2 even 3 4 odd 5 6 even 1 6 even 7 10 odd
Sample Output
3
Source
/************************************************************************* > File Name: poj1733.cpp > Author: ALex > Mail: [email protected] > Created Time: 2015年01月22日 星期四 21时28分53秒 ************************************************************************/ #include <map> #include <set> #include <queue> #include <stack> #include <vector> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 10010; int cnt[N]; int xis[N]; int ret; int father[N]; char str[10]; struct node { int l, r; bool flag; }que[N]; int BinSearch (int val) { int l = 1; int r = ret; int mid; while (l <= r) { mid = (l + r) >> 1; if (xis[mid] > val) { r = mid - 1; } else if (xis[mid] < val) { l = mid + 1; } else { break; } } return mid; } int find (int x) { if (father[x] == -1) { return x; } int fa = father[x]; father[x] = find (father[x]); cnt[x] ^= cnt[fa]; return father[x]; } int main () { int n, m; int l, r; while (~scanf("%d", &n)) { memset (father, -1, sizeof(father)); scanf("%d", &m); ret = 0; for (int i = 1; i <= m; ++i) { scanf("%d%d%s", &l, &r, str); --l; que[i].l = l; que[i].r = r; if (str[0] == 'e') { que[i].flag = 0; //偶数个1 } else { que[i].flag = 1; //奇数个1 } xis[++ret] = l; xis[++ret] = r; } sort (xis + 1, xis + 1 + ret); ret = unique (xis + 1, xis + 1 + ret) - xis - 1; int ans = 0; for (int i = 1; i <= m; ++i) { l = BinSearch (que[i].l); r = BinSearch (que[i].r); int f1 = find(l); int f2 = find(r); // printf("%d的父亲%d, %d的父亲%d\n", l, f1, r, f2); if (f1 == f2) { if ((cnt[l] ^ cnt[r]) != que[i].flag) { break; } ++ans; } else { if (f1 < f2) { father[f2] = f1; // printf("%d 的 父亲 %d\n", f2, f1); cnt[f2] = cnt[l] ^ que[i].flag ^ cnt[r]; } else { father[f1] = f2; // printf("%d 的 父亲 %d\n", f1, f2); cnt[f1] = cnt[l] ^ que[i].flag ^ cnt[r]; } ++ans; } } printf("%d\n", ans); } return 0; }