68 pts 求调( WA on #4 )
code :
#include<bits/stdc++.h>
#define ll long long//#define ll long long你值得拥有
using namespace std;
const int maxn=50005;
ll n;
string a[maxn],b[maxn];
map <string,string> fa;
map <string,ll> m;
string find(string x)
{
return (x!=fa[x]?fa[x]=find(fa[x]):fa[x]);
}
int main()
{
cin>>n;
for(ll i=1;i<=n;i++)
cin>>a[i];
for(ll i=1;i<=n;i++)
cin>>b[i];
for(ll i=1;i<=n;i++)
fa[a[i]]=(!isdigit(a[i][0])?fa[a[i]]:a[i]),fa[b[i]]=(!isdigit(b[i][0])?b[i]:fa[b[i]]);
for(ll i=1;i<=n;i++)
{
if(a[i]!=b[i])
{
if(isdigit(a[i][0])&&isdigit(b[i][0]))
{
cout<<"NE"<<endl;
return 0;
}
if(isdigit(a[i][0])&&!isdigit(b[i][0]))
{
if(m[b[i]]!=a[i][0]-'0'&&m[b[i]]!=0)
{
cout<<"NE"<<endl;
return 0;
}
m[b[i]]=a[i][0]-'0';
}
if(!isdigit(a[i][0])&&isdigit(b[i][0]))
{
if(m[a[i]]!=b[i][0]-'0'&&m[a[i]]!=0)
{
cout<<"NE"<<endl;
return 0;
}
m[a[i]]=b[i][0]-'0';
}
if(!isdigit(a[i][0])&&!isdigit(b[i][0]))
fa[find(a[i])]=find(b[i]);
}
}
for(ll i=1;i<=n;i++)
fa[a[i]]=(!isdigit(a[i][0])?find(a[i]):fa[a[i]]),fa[b[i]]=(!isdigit(b[i][0])?find(b[i]):fa[b[i]]);
for(ll i=1;i<=n;i++)
{
if(!isdigit(a[i][0]))
{
if(m[fa[a[i]]]!=0&&m[fa[a[i]]]!=m[a[i]]&&m[a[i]]!=0)
{
cout<<"NE"<<endl;
return 0;
}
m[fa[a[i]]]=(m[fa[a[i]]]==0?m[a[i]]:m[fa[a[i]]]);
}
if(!isdigit(b[i][0]))
{
if(m[fa[b[i]]]!=0&&m[fa[b[i]]]!=m[b[i]]&&m[b[i]]!=0)
{
cout<<"NE"<<endl;
return 0;
}
m[fa[b[i]]]=(m[fa[b[i]]]==0?m[b[i]]:m[fa[b[i]]]);
}
}
cout<<"DA"<<endl;
return 0;
}