Es la mente humana la que libera la luz infinita, y también es la mente humana la que crea la oscuridad ilimitada. La luz y la oscuridad se entrelazan y luchan juntas. Este es el mundo por el que estamos nostálgicos y desamparados.
Lo más sutil de organizar un banquete es organizar los asientos para todos los invitados que asisten al banquete. En cualquier caso, ¡es imposible alinear a dos rivales en la misma mesa de banquete! Esta ardua tarea ahora se le confía a usted. Para cualquier par de invitados, por favor escriba un programa para decirle al anfitrión si pueden organizarse para sentarse juntos.
Formato de entrada:
Ingrese la primera línea para dar 3 enteros positivos: N
(≤100), es decir, el número total de invitados que asistieron al banquete, luego estas personas se N
numeran del 1 al número; M
es el número de relaciones conocidas entre dos invitados; K
es el elemento de consulta número. En las M
líneas siguientes , cada línea muestra la relación entre un par de invitados, el formato es :, 宾客1 宾客2 关系
donde 关系
1 significa amigo, -1 significa oponente muerto. Tenga en cuenta que dos personas no pueden ser a la vez amigos y enemigos. En la última K
línea, cada línea da un par de números de invitados para ser consultados.
Aquí se asume que los amigos de los amigos también son amigos. Pero el enemigo del enemigo no es necesariamente un amigo, y el enemigo de un amigo no es necesariamente un enemigo. Solo una relación hostil puramente directa es absolutamente imposible de sentar juntos.
Formato de salida:
Genere una fila de resultados para cada consulta: si los dos invitados son amigos y no hay una relación hostil, entonces los resultados No problem
; si no son amigos, pero no hostiles, entonces los resultados OK
; si hay hostilidad entre ellos, pero también hay Los amigos comunes salen OK but...
, si solo tienen una relación hostil, salen No way
.
Muestra de entrada:
7 8 4
5 6 1
2 7 -1
1 3 1
3 4 1
6 7 -1
1 2 1
1 4 1
2 3 -1
3 4
5 7
2 3
7 2
Salida de muestra:
No problem
OK
OK but...
No way
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX
//#include<bits/stdc++.h>
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
#define PI 3.1415926
typedef long long ll;
using namespace std;
int const mod=1e9+7;
const int maxn=1e4+10;
int n,m,k,x,y,z,f[110],mp[110][110];
void init(){
for(int i=1;i<=n;i++)
f[i]=i;
}
int fd(int xx){
if(f[xx]==xx)
return f[xx];
f[xx]=fd(f[xx]);
return f[xx];
}
void hb(int xx,int yy){
int fx=fd(xx);
int fy=fd(yy);
if(fx!=fy)
f[fy]=fx;
}
int main(){
int cx,cy;
cin>>n>>m>>k;
init();
while(m--){
cin>>x>>y>>z;
if(z==-1)
mp[x][y]=mp[y][x]=-1;
else
hb(x,y);
}
for(int i=0;i<k;i++){
cin>>cx>>cy;
if(fd(cx)==fd(cy)&&mp[cx][cy]==0)
cout<<"No problem"<<endl;
else if(fd(cx)!=fd(cy)&&mp[cx][cy]==0)
cout<<"OK"<<endl;
else if(fd(cx)==fd(cy)&&mp[cx][cy]==-1)
cout<<"OK but..."<<endl;
else if(fd(cx)!=fd(cy)&&mp[cx][cy]==-1)
cout<<"No way"<<endl;
}
return 0;
}