求助
  • 板块学术版
  • 楼主ZSB00000
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/20 20:20
  • 上次更新2024/3/20 21:53:09
查看原帖
求助
1017629
ZSB00000楼主2024/3/20 20:20

P7304

#include<bits/stdc++.h>
using namespace std;
map<string,int>ma;
map<string,string>father;
string find(string x) {
	if(x==father[x])
	{
		return x;
	}
	else
	{
		father[x]=find(father[x]);	
		if(isdigit(x[0]))
		{
			//ma[father[x]]=stoi(x);
		}
		return father[x];
	}
}
void unionn(string x,string y)
{
	father[find(x)]=find(y);
}
int n;
string a[(int)5e4+5],b[(int)5e4+5];
int main() {
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=n;i++)
	{
		cin>>b[i];
	}
	for(int i=1;i<=n;i++)
	{
		father[a[i]]=a[i];
		father[b[i]]=b[i];
	}
	for(int i=1;i<=n;i++)
	{
		ma[find(a[i])]=ma[find(b[i])]=1001;
		if(a[i]==b[i])
		{
			continue;
		}
		if(isdigit(a[i][0]))
		{
			if(isdigit(b[i][0]))
			{
				int x=stoi(a[i]);
				int y=stoi(b[i]);
				if(x!=y)
				{
					cout<<"NE";
					return 0;
				}
				else
				{
					unionn(a[i],b[i]);
				}
			}
			else
			{
				if(!ma.count(find(b[i])))
				{
					unionn(a[i],b[i]);
					ma[find(b[i])]=stoi(a[i]);
				}
				else if(ma.count(find(b[i]))&&ma[find(b[i])]==stoi(a[i]))
				{
					unionn(a[i],b[i]);
				}
				else if(ma.count(find(b[i]))&&ma[find(b[i])]==1001)
				{
					ma[find(b[i])]=stoi(a[i]);
				}
				else if(ma.count(find(b[i]))&&ma[find(b[i])]!=stoi(a[i])&&ma[find(b[i])]!=1001)
				{
					cout<<"NE";
					return 0;
				}
				ma[find(b[i])]=stoi(a[i]);				
			}
		}
		else
		{
			if(isdigit(b[i][0]))
			{
				if(!ma.count(find(a[i]))&&ma[find(a[i])]!=1001)
				{
					unionn(a[i],b[i]);
					ma[find(a[i])]=stoi(b[i]);
				}
				else if(ma.count(find(a[i]))&&ma[find(a[i])]==stoi(b[i]))
				{
					unionn(a[i],b[i]);
				}
				else if(ma.count(find(a[i]))&&ma[find(a[i])]==1001)
				{
					unionn(a[i],b[i]);
					ma[find(a[i])]=stoi(b[i]);
				}
				else if(ma.count(find(a[i]))&&ma[find(a[i])]!=stoi(b[i])&&ma[find(a[i])]!=1001)
				{
					cout<<"NE";
					return 0;
				}
				ma[find(a[i])]=stoi(b[i]);				
			}
			else
			{
				if(ma.count(find(a[i]))&&ma.count(find(b[i]))&&ma[find(a[i])]!=ma[find(b[i])])
				{
					cout<<"NE";
					return 0;
				}
				else if(ma.count(a[i])&&ma.count(b[i])&&ma[find(a[i])]==1001&&ma[find(b[i])]==1001)
				{
					unionn(a[i],b[i]);
				}
				else if(!ma.count(find(a[i]))&&ma.count(find(b[i])))
				{
					unionn(a[i],b[i]);
					ma[find(a[i])]=ma[find(b[i])];
				}
				else if(!ma.count(find(b[i]))&&ma.count(find(a[i])))
				{
					unionn(a[i],b[i]);
					ma[find(b[i])]=ma[find(a[i])];
				}
				else if(!ma.count(find(a[i]))&&!ma.count(find(b[i])))
				{
					unionn(a[i],b[i]);
				}
			}			
		}
	}
	for(int i=1;i<=n;i++)
	{
		int x=ma[find(a[i])];
		int y=ma[find(b[i])];
//		cout<<ma[find(a[i])]<<" "<<ma[find(b[i])]<<endl;
		if(x!=y&&ma[find(a[i])]!=1001&&ma[find(b[i])]!=1001)
		{
			cout<<"NE";
			return 0;
		}
	}
	cout<<"DA";
}

49分求助

2024/3/20 20:20
加载中...