Vijos 小胖的奇偶

第一遍做

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstdio>
 4 #include<cstring>
 5 using namespace std;
 6 int n,m;
 7 char ss[105];
 8 int rela[5000005];
 9 int fa[5000005];
10 int find(int x)
11 {
12     if(x==fa[x])return x;
13     int ff=fa[x];
14     fa[x]=find(ff);
15     rela[x]=(rela[x]+rela[ff])%2;
16     return fa[x];
17 }
18 int main()
19 {
20     freopen("xp.in","r",stdin);
21     freopen("xp.out","w",stdout);
22     int i;
23     int left,right;
24     cin>>n>>m;
25     int ans=m;
26     for(i=1;i<=n;i++)fa[i]=i;
27     for(i=1;i<=m;i++)
28     {
29         cin>>left>>right;
30         scanf("%s",ss);
31         left--;
32         if(ss[0]=='e')
33         {
34             int ffl=find(left);
35             int ffr=find(right);
36             if(ffl<ffr)
37             {
38                 fa[ffr]=ffl;
39                 rela[ffr]=(rela[left]-rela[right]+2)%2;
40             }
41             else if(ffl>ffr)
42             {
43                 fa[ffl]=ffr;
44                 rela[ffl]=(rela[right]-rela[left]+2)%2;
45             }
46             else
47             {
48                 if(rela[right]!=rela[left])
49                 {
50                     ans=i-1;
51                     break;
52                 }
53             }
54         }
55         if(ss[0]=='o')
56         {
57             int ffl=find(left);
58             int ffr=find(right);
59             if(ffl<ffr)
60             {
61                 fa[ffr]=ffl;
62                 rela[ffr]=(rela[left]-rela[right]+3)%2;
63             }
64             else if(ffl>ffr)
65             {
66                 fa[ffl]=ffr;
67                 rela[ffl]=(rela[right]-rela[left]+3)%2;
68             }
69             else
70             {
71                 if(rela[right]==rela[left])
72                 {
73                     ans=i-1;
74                     break;
75                 }
76             }
77         }
78     }
79     cout<<ans;
80     return 0;
81 }

RE 80 注意长度范围QwQ

第二遍 map一下

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<map>
 6 using namespace std;
 7 int n,m;
 8 char ss[105];
 9 int rela[500005];
10 int fa[500005];
11 map<int,int>mp;
12 int find(int x)
13 {
14     if(x==fa[x])return x;
15     int ff=fa[x];
16     fa[x]=find(ff);
17     rela[x]=(rela[x]+rela[ff])%2;
18     return fa[x];
19 }
20 int main()
21 {
22     freopen("xp.in","r",stdin);
23     freopen("xp.out","w",stdout);
24     int i;
25     int left,right;
26     cin>>n>>m;
27     int ans=m;
28     int cnt=0;
29     for(i=1;i<=50005;i++)
30         fa[i]=i;
31     for(i=1;i<=m;i++)
32     {
33         cin>>left>>right;
34         scanf("%s",ss);
35         left--;
36         if(mp[left]==0){cnt++;mp[left]=cnt;}
37         if(mp[right]==0){cnt++;mp[right]=cnt;}
38         if(ss[0]=='e')
39         {
40             int ffl=find(mp[left]);
41             int ffr=find(mp[right]);
42             if(ffl<ffr)
43             {
44                 fa[ffr]=ffl;
45                 rela[ffr]=(rela[mp[left]]-rela[mp[right]]+2)%2;
46             }
47             else if(ffl>ffr)
48             {
49                 fa[ffl]=ffr;
50                 rela[ffl]=(rela[mp[right]]-rela[mp[left]]+2)%2;
51             }
52             else
53             {
54                 if(rela[mp[right]]!=rela[mp[left]])
55                 {
56                     ans=i-1;
57                     break;
58                 }
59             }
60         }
61         if(ss[0]=='o')
62         {
63             int ffl=find(mp[left]);
64             int ffr=find(mp[right]);
65             if(ffl<ffr)
66             {
67                 fa[ffr]=ffl;
68                 rela[ffr]=(rela[mp[left]]-rela[mp[right]]+3)%2;
69             }
70             else if(ffl>ffr)
71             {
72                 fa[ffl]=ffr;
73                 rela[ffl]=(rela[mp[right]]-rela[mp[left]]+3)%2;
74             }
75             else
76             {
77                 if(rela[mp[right]]==rela[mp[left]])
78                 {
79                     ans=i-1;
80                     break;
81                 }
82             }
83         }
84     }
85     cout<<ans;
86     return 0;
87 }

AC啦啦啦

2019.3.23

猜你喜欢

转载自www.cnblogs.com/oybdooo-ozai/p/10586098.html