| ||||||||||
| 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