火影忍者之~纲手
原本觉得应该是并查集,。。。然后发现没有强弱关系传递。。。嗯,,,还是想麻烦了。。
但这题还是一个很好的思路题。。
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
int vis[1005][1005];///记录比赛情况,就是记录谁和谁比赛过
int main()
{
char namea[25];
char nameb[25];
map<string,int>m;///确立map对立关系
int n;
while(cin>>n)
{
m.clear();///别忘清空
memset(vis,0,sizeof(vis));
int flag=0;
for(int i=0; i<n; i++)
{
scanf("%s %s",namea,nameb);
if(!m[namea])
{
m[namea]=flag++;///如果没有比赛过,就自增。
}
if(!m[nameb])
{
m[nameb]=flag++;
}
vis[m[namea]][m[nameb]]=1;
}
int n2;
scanf("%d",&n2);
while(n2--)
{
scanf("%s %s",namea,nameb);
/*
unknow情况有以下几种
!m[namea]||!m[nameb] 代表两者都没有去比赛
vis[m[namea]][m[nameb]]&&vis[m[nameb]][m[namea]] 代表A战胜了B B又战胜了A,互相矛盾
vis[m[namea]][m[nameb]]==0&&vis[m[nameb]][m[namea]]==0 代表两者没有必过赛
*/
if(!m[namea]||!m[nameb]||(vis[m[namea]][m[nameb]]&&vis[m[nameb]][m[namea]])||(vis[m[namea]][m[nameb]]==0&&vis[m[nameb]][m[namea]]==0))
{
printf("unknown\n");
}
else if(vis[m[namea]][m[nameb]])
{
printf("win\n");
}
else if(vis[m[nameb]][m[namea]])
{
printf("lose\n");
}
}
}
return 0;
}
今天的文章HRBUST 1314 火影忍者之~纲手【MAP】分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/8339.html