P10477
P10477 Subway tree systems https://www.luogu.com.cn/problem/P10477
思路
可以发现,对于一个子树,0与1的个数会同样多,因此可以将树分为许多子树,子树继续分更小的子树。然后按照树内的字典序排序形成有序的树,会发现如果两种路线意义相同,其排序后的树将完全相同。
代码 来自洛谷用户__Sky__Dream__!!!
#include <bits/stdc++.h>
using namespace std;
string s1,s2;
void stl(string &s){
if(s=="01") return;
s=s.substr(1,s.size()-2);
int cnt=0,st=0;
vector<string> vs;
for(int i=0;i<s.size();i++){
cnt+=(s[i]=='0'?1:-1);
if(!cnt){
string ss=s.substr(st,i-st+1);
stl(ss);
vs.push_back(ss);
st=i+1;
}
}
sort(vs.begin(),vs.end());
s='0';
for(int i=0;i<vs.size();i++){
s+=vs[i];
}s+='1';
return;
}
int main(){
int t;
cin>>t;
while(t--){
cin>>s1>>s2;
s1='0'+s1+'1';
s2='0'+s2+'1';
stl(s1);
stl(s2);
if(s1==s2) printf("same\n");
else printf("different\n");
}
return 0;
}
6.12 蒟蒻冲刺6级 1