|
|
вернуться в форумWho can help me?WA#1 Послано hywwqq 20 ноя 2012 17:52 #include <iostream> #include <cstdio> #include <deque> #include <map> #include <string> #include <cstring> #include <cstdlib> #include <algorithm> #include <functional> using namespace std; const int maxn=20002; int Hlen=6000; int father[maxn]; int flag[maxn]; int getfather(int x) { int tmp=father[x]; if(x==father[x]) return x; else { father[x]=getfather(father[x]); return father[x]; } } void Union(int x,int y) { int fx=getfather(x); int fy=getfather(y); if(fx!=fy) father[fy]=fx; } void init() { for(int i=0;i<maxn;i++) father[i]=i; } int mp(int x) { int ax=x%Hlen; if(flag[ax]!=-1&&flag[ax]!=x) ax=(ax+1)%Hlen; flag[ax]=x; return ax; } int main() { int len,N,i; int level=10000; while(1) { scanf("%d",&len); if(len==-1) break; scanf("%d",&N);
init(); memset(flag,-1,sizeof (flag)); for(i=0;i<N;i++) { int a,b; char str[10]; scanf("%d%d%s",&a,&b,str); a=mp(a-1); b=mp(b); if(str[0]=='e') { if(getfather(a)==getfather(b+level)) break; Union(a,b); Union(a+level,b+level); } else { if(getfather(a)==getfather(b)) break; Union(a,b+level); Union(a+level,b); } } char str1[100]; int m=i; for(i;i<N;i++) gets(str1); printf("%d\n",m); } system("pause"); return 0; } |
|
|