题目
G - I love Codeforces
题意:输入n,接下来n行输入n个名字;输入m,接下来m行每行输入u,v,代表u爱上了v。若u爱上v,u就会把名字改成I_love_v,请输出最后第一个人的
名字。
思路:纯模拟会re,mtl等错误,所以只需要记录用一个数组记录I_love_v的次数即可。
AC代码
1
#include <bits/stdc++.h>
using namespace std;
char s[200010][100];
int ans[200010];
//int vis[200010];
int main()
{
int n,m,a,b;
// char t[]="I_love_";
cin>>n;
for(int i=1; i<=n; i++)
cin>>s[i];
cin>>m;
for(int i=1; i<=m; i++)
{
cin>>a>>b;
strcpy(s[a],s[b]);
ans[a]=ans[b]+1;
}
// for(int i=1; i<=n ;i++)
// cout<<"!!!"<<ans[i]<<endl;
for(int i=1; i<=ans[1];i++)
cout<<"I_love_";
cout<<s[1]<<endl;
return 0;
}
2
#include <bits/stdc++.h>
using namespace std;
char s[200010][100];
int ans[200010];
int vis[200010];
int main()
{
int n,m,a,b;
// char t[]="I_love_";
cin>>n;
for(int i=1; i<=n; i++)
cin>>s[i];
cin>>m;
for(int i=1; i<=m; i++)
{
cin>>a>>b;
strcpy(s[a],s[b]);
if(vis[b]==0&&vis[a]==0)
{
ans[a]++;
vis[a]=1;
}
else if(vis[b]==1&&vis[a]==0)
{
ans[a]=ans[b]+1;
vis[a]=1;
}
else if(vis[b]==0&&vis[a]==1)
{
ans[a]=1;
vis[b]=1;
}
else if(vis[b]==1&&vis[a]==1)
{
ans[a]=ans[b]+1;
}
// cout<<ans[a]<<"!!!!!!!!!!"<<endl;
}
// for(int i=1; i<=n ;i++)
// cout<<"!!!"<<ans[i]<<endl;
for(int i=1; i<=ans[1];i++)
cout<<"I_love_";
cout<<s[1]<<endl;
return 0;
}