天天看點

排座位

#include <bits/stdc++.h>
using namespace std;
int fa[105];
int pos[105][105];
int find(int x)
{
  if(fa[x]!=x) fa[x]=find(fa[x]);
  return fa[x];
}
void group(int x,int y)
{
  int tx=find(x);
  int ty=find(y);
  if(tx!=ty)
  {
    fa[tx]=ty;
  }
}
int main()
{
  int n,m,k;
  cin>>n>>m>>k;
  for(int i=1;i<=n;i++)
  {
    fa[i]=i;
  }
  while(m--)
  {
    int u,v,w;
    cin>>u>>v>>w;
    if(w==-1) pos[u][v]=pos[v][u]=-1;
    else
    {
      group(u,v);
    }
  }
  while(k--)
  {
    int a,b;
    cin>>a>>b;
    if(find(a)==find(b)&&pos[a][b]==-1)
    {
      cout<<"OK but..."<<endl;
    }
    else if(find(a)==find(b)&&pos[a][b]!=-1)
    {
      cout<<"No problem"<<endl;
    }
    else if(find(a)!=find(b)&&pos[a][b]!=-1)
    {
      cout<<"OK"<<endl;
    }
    else if(find(a)!=find(b)&&pos[a][b]==-1)
    {
      cout<<"No way"<<endl;
    }
  }
  return 0;
}      

繼續閱讀