Orden topológico de la PTA (25 分)

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.

Este es un problema presentado en el Examen de ingreso para graduados en 2018: ¿Cuál de los siguientes NO es un orden topológico obtenido del gráfico dirigido dado? Ahora se supone que debe escribir un programa para probar cada una de las opciones.

gre.jpg

Especificación de entrada:

Cada archivo de entrada contiene un caso de prueba. Para cada caso, la primera línea da dos números enteros positivos N (≤ 1,000), el número de vértices en el gráfico y M (≤ 10,000), el número de aristas dirigidas. Luego siguen M líneas, cada una da los vértices inicial y final de una arista. Los vértices se numeran del 1 al N. Después de la gráfica, hay otro entero positivo K (≤ 100). Luego siguen K líneas de consulta, cada una da una permutación de todos los vértices. Todos los números de una línea están separados por un espacio.

Especificación de salida:

Imprima en una línea todos los índices de consultas que correspondan a "NO un orden topológico". Los índices comienzan desde cero. Todos los números están separados por un espacio y no debe haber ningún espacio adicional al principio o al final de la línea. Se garantiza que hay al menos una respuesta.

Entrada de muestra:

6 8
1 2
1 3
5 2
5 4
2 3
2 6
3 4
6 4
5
1 5 2 3 6 4
5 1 2 6 3 4
5 1 2 3 6 4
5 2 1 6 3 4
1 2 3 4 5 6

Salida de muestra:

3 4
#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=1e5+10;
int mp[1001][1001];
vector<int> v1(1001,0);
vector<int> v2(1001,0);
vector<int> v;
int n,m,k;
void judge(int a){
	for(int i=1;i<=n;i++){
		if(mp[a][i]==1){
			v2[i]--;
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int a,b;
		cin>>a>>b;
		mp[a][b] = 1;
		v1[b]++;
	}
	cin>>k;
	int fg=0;
	for(int i=0;i<k;i++){
		int flag=0;
		for(int j=1;j<=n;j++)
			v2[j]=v1[j];
		for(int j=1;j<=n;j++){
			int a;
			cin>>a;
			if(v2[a]==0)
			 	judge(a);
			else{
				flag=1;
				fg++;
			}
		}
		if(flag)
			v.push_back(i);
	}
	for(int i=0;i<v.size();i++){
		if(i==0)
			cout<<v[i];
		else
			cout<<' '<<v[i];
	}
	cout<<endl;
	return 0;
}

 

Supongo que te gusta

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