El diseño del programa pensamiento y la práctica Week7 trabajo A-TT gato mágico

Tema Enlace: A-TT gato mágico

Descripción Tema:
Como todos sabemos, el TT tiene un gato mágico.
En este día, el TT se dedica al juego de "gato y el ratón", pero el juego no ha comenzado, el gato magia sabia dirá la última carrera TT resultados. TT muy sorprendido, no sorprendido por su pequeño gato hablando realmente sorprendido más en este punto pequeño y lindo por qué no tiene tal magia?
gato magia dicho TT, tiene en realidad el resultado de una mesa de juego, hay individuos N y la relación M entre el resultado anterior, cada relación entre el resultado de AB, dijo un puede vencer a B, y el resultado de la relación es transitiva. Es decir, una que B, B a C, entonces A puede ser mejor que C.
TT no creía lo que él pequeño gato puede predecir el juego, por lo que se preguntó cuántos de los jugadores saben de antemano el resultado no puede, ¿puedes ayudarlo?

Entrada:
La primera línea indica el número de grupos de datos.
Cada dato de la primera línea da la N y M (N, M <= 500 ).
Siguiente M filas, cada fila da AB, puede ser mejor que B. A representa

Salida:
Para cada conjunto de datos, se determina hasta qué punto el resultado del juego no puede ser conocida de antemano. Nota (a, b) y (b, a) es equivalente, es decir, cada tupla se calcula sólo una vez.

Entrada de la muestra:
3
3 3
1 2
1 3
2 3
3 2
1 2
2 3
4 2
1 2
3 4

Salida de muestra:
0
0
4

Ideas:
Este uso del título Floyd algoritmo para indicar el resultado de las relaciones transitivas. En primer lugar guardado con el resultado matriz N-dimensional de la relación entre cada persona, se inicializa a 0, que muestra la relación entre el resultado es desconocido, y luego realizar el procesamiento de algoritmo de Floyd a realizar bucle triple, para asegurar la transmisión de los resultados de la relación. Si bien la poda de operación, el grupo sólo ha lidiar con el resultado de la relación. En la salida, ya que se determina el resultado de la relación entre los dos, y teniendo en cuenta por lo tanto sólo la mitad de la matriz (no incluyendo la diagonal en sí).

Resumen:
Esta pregunta se aplica básicamente el algoritmo, teniendo en cuenta la poda, reduciendo la complejidad.

código:

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int path[510][510];
int main(){
	//freopen("in.txt","r",stdin);
	int T,N,M,A,B,cnt;
	cin>>T;
	while(T--){
		cnt=0;
		memset(path,0,sizeof(path)); 
		cin>>N>>M;
		for(int i=0;i<M;i++){
			cin>>A>>B;
			path[A][B]=1;
		}
		for(int i=1;i<=N;i++)
		  	for(int j=1;j<=N;j++)
		  		if(path[j][i]==1)
		    		for(int k=1;k<=N;k++)
		    			if(path[i][k]==1)
		    				path[j][k]=1;
		for(int i=1;i<=N;i++)
			for(int j=1;j<=N;j++)
				if(i!=j&&path[i][j]==0&&path[j][i]==0)
					cnt++;
		cout<<cnt/2<<endl;
	}
}
Publicado 25 artículos originales · ganado elogios 0 · Vistas 587

Supongo que te gusta

Origin blog.csdn.net/qq_43666020/article/details/105312584
Recomendado
Clasificación