Untitled
unknown
plain_text
2 years ago
1.5 kB
3
Indexable
#include <iostream> using namespace std; int n,m; char a[100001]; char d[100001]; int b[100001]; int c[100001]; int vs[100001]; int r=-1; int q[10000000]; int ans,ans1; void reset() { for(int i=1; i<=n;i++)vs[i]=0; } void push(int x) { r++; q[r]=x; } void pop(int &x) { x=q[r]; r--; } int dfs(int x) { ans1=0; int d1=0; push(x); vs[x]=1; while(r!=-1){ pop(x); for(int i=0;i<m;i++){ if(b[i]==x && vs[c[i]]==0){ vs[c[i]]=1; //push(c[i]); if(d[b[i]]=='B') d[c[i]]='G'; else if(d[b[i]]=='G') d[c[i]]='B'; dfs(c[i]); } else if(c[i]==x && vs[b[i]]==0){ vs[b[i]]=1; //push(b[i]); if(d[c[i]]=='B') d[b[i]]='G'; else if(d[c[i]]=='G') d[b[i]]='B';dfs(b[i]); } else if((b[i]==x && vs[c[i]]==1 && d[c[i]]==d[b[i]])||(c[i]==x && vs[b[i]]==1 && d[c[i]]==d[b[i]])){ ans1=-1; d1=1; break; } } if(d1==1) break; } if(ans1==0){ for(int i=1; i<=n;i++){ if(a[i]!=d[i]) ans1++; } } return ans1; } int main(){ freopen("input.txt","r",stdin); int t; cin >> t; for(int tc = 1; tc <= t; tc++){ cin >>n>>m; for(int i=1; i<=n; i++){ cin >> a[i]; } for(int i=1; i<=n; i++){ vs[i]=0; } for(int i=0;i<m;i++){ cin>>b[i]>>c[i]; } r=-1; for(int i=0; i<2;i++){ if(i==0){ d[1]='G'; ans=dfs(1); reset(); } if(ans!=-1 && i==1){ d[1]='B'; if(ans>dfs(1)) ans=dfs(1); } } cout<<ans<<endl; } return 0; }
Editor is loading...