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

posted @ 2025-06-12 20:11  虚拟星辰  阅读(1)  评论(0)    收藏  举报