2018 ICPC 北京站签到题

2018 ACM-ICPC ACM 北京站 A题


题意:
给你n对关系让你判断这个关系是否与之前的矛盾,要是矛盾的话你就输出第一个矛盾的关系,要是全都符合你就输出一个数字0;

题解:
我们可以利用map来解决,因为只有20组关系,所以直接暴力跑就可以用map来记录一下人的标号:
然后直接用一个二维数组来记录一下他们之间的关系要是关系矛盾的话直接输出答案即可

 #include<bits/stdc++.h>
 using namespace std;
int vis[50][50];
map<string,int>mp;
int main()
{ 
   ios::sync_with_stdio(0);
  cin.tie(0);
   cout.tie(0);
		 int flag;
     int T; string s1;string s2;
	 while(cin>>T)
	 {
           memset(vis,0,sizeof(vis));		  
			 int flag=0;
			 int num =1;
			 mp.clear();
			 for(int i=0;i<T;i++)
			 {
               cin>>s1>>s2;
			   if(!mp[s1])
                mp[s1]=num++;
			     if(!mp[s2])
			     mp[s2]=num++;
               int x=mp[s1];
			   int y=mp[s2];
			 //  cout<<"num:"<<num<<endl;
			  vis[x][y]=1;
			   if(vis[y][x])
				 {
						 cout<<s1<<" "<<s2<<endl;
						 flag=1;
				 }
			   for(int i=1;i<=num;i++)
                    for(int j=1;j<=num;j++)
						for(int k=1;k<=num;k++)
						{
								if(i!=j&&j!=k&&vis[i][j]&&vis[j][k])
										vis[i][k]=1;
						    }
			 }
		  if(!flag)
			cout<<"0"<<endl;
	 }
}

猜你喜欢

转载自blog.csdn.net/qq_40623603/article/details/84900827