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 |
Re:新思维In Reply To:新思维 Posted by:13408100238 at 2015-03-24 21:52:26 > #include <iostream> > #include <cstdio> > #include <cstring> > #include <cmath> > #include <algorithm> > #include <string> > #include <vector> > #include <set> > #include <map> > #include <queue> > #include <stack> > #include <sstream> > #include <iomanip> > using namespace std; > const int INF=0x4fffffff; > const int EXP=1e-6; > const int MS=50005; > const int MS2=100005; > > int op[MS2],X[MS2],Y[MS2]; > int fa[3*MS]; > > int N,K; > void input() > { > scanf("%d%d",&N,&K); > for(int i=0;i<K;i++) > scanf("%d%d%d",&op[i],&X[i],&Y[i]); > for(int i=0;i<3*N;i++) > fa[i]=i; > } > > int find(int x) > { > return x==fa[x]?x:fa[x]=find(fa[x]); > } > > void merge(int x,int y) > { > int f1=find(x); > int f2=find(y); > if(f1!=f2) > fa[f1]=f2; > } > > bool same(int x,int y) > { > return find(x)==find(y); > } > > void solve() > { > int ans=0; > for(int i=0;i<K;i++) > { > int t=op[i]; > int x=X[i]-1; > int y=Y[i]-1; > if(x<0||x>=N||y<0||y>=N) > { > ans++; > continue; > } > if(t==1) > { > if(same(x,y+N)||same(x,y+2*N)) > ans++; > else > { > merge(x,y); > merge(x+N,y+N); > merge(x+2*N,y+2*N); > } > } > else > { > if(same(x,y)||same(x,y+2*N)) > ans++; > else > { > merge(x,y+N); > merge(x+N,y+2*N); > merge(x+2*N,y); > } > } > } > printf("%d\n",ans); > } > > int main() > { > input(); > solve(); > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator