Asientos de la fila PTA (25 puntos) (búsqueda combinada)

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 Nnumeran del 1 al número; Mes el número de relaciones conocidas entre dos invitados; Kes el elemento de consulta número. En las Mlí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 Klí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;
}

 

Supongo que te gusta

Origin blog.csdn.net/weixin_44170305/article/details/108563303
Recomendado
Clasificación