Ocultar ch6092 y buscar puntos de cobertura mínima (DAG) de trayectoria repetible

ideas:

¿Por qué este tema es el camino solución positiva DAG cubierta repetible punto más pequeño que? ? ? Bloggers deprimidos durante dos días (en realidad jugando el juego para dos días) , obtener la respuesta de repente del juego (en realidad jugar los platos de caza, abusado, o que se encuentran ancla ,,, autista, y vendrá a aprender niños)

Pequeño BB, texto partir de este momento. 


En primer lugar claro, la solución de uno de los mayores conjunto de puntos, no cumplió con el camino conjunto de puntos entre dos puntos cualesquiera. ohhhh? ? ? Este no es el máximo conjunto independiente que? ? ? Por desgracia, este es un grafo dirigido, el mayor conjunto independiente es gratis, y si vas a definir un grafo bipartito, se encuentra el mapa, la parte delantera tiene una premisa, un grafo no dirigido cómo la forma, que es un grafo bipartito en términos de grafo no dirigido. Eso no puede tener esto como el mayor conjunto independiente para examinar un plan.

Pero tenemos que saber cobertura mínima Figura punto de referencia, definido de la siguiente manera: seleccionar al menos el borde discontinuo que abarca todos los vértices . camino mínimo cubierta se puede repetir: seleccionar al menos cubrir todos los bordes pueden intersectar los vértices . Para este conjunto de caminos, cada uno elegido desde el interior hasta un punto, si usted selecciona más de un punto, por ejemplo dos, entonces, ciertamente, hay un camino simple puede ser una conexión entre estos dos puntos, que es, sin duda, tanto una de las partes puede llegar al otro lado. Así que de todos nuestros caminos, cada camino escoger un punto, por fin compensar el mayor punto de recogida.

Hay poca necesidad de explicar por qué este problema está cubierto por una trayectoria mínima se puede repetir, porque el sujeto ha dicho que si un punto de caminar a lo largo de un camino para llegar a otro punto, los dos puntos también se podían ver el uno del otro , es decir para el lado a-> b, b-> c, A- indirecta> c puede ser considerado. Por lo tanto, en la primera solicitud al punto de Floyd transitiva cierre de división para establecer un grafo bipartito, DAG y luego correr de nuevo cubierto un punto de recorrido mínimo. (Tales problemas están más acostumbrados a matriz bloggers adyacencia directamente Qaq)

 

/**
 *
 * Author: correct
 *
 */
#include <bits/stdc++.h>
#define mem(a, b) memset(a, b, sizeof a)
using namespace std;
const int N = 210;
bool w[N][N];
int match[N];
bool vis[N];
int n, m;
bool dfs(int x){
	for (int i = 1; i <= n; i++){
		if (w[x][i] && !vis[i]){
			vis[i] = 1;
			if (match[i] == -1 || dfs(match[i])){
				match[i] = x;
				return 1;
			}
		}
	}
	return 0;
}
void pre_work(){
	mem(match, -1);
	mem(vis, 0);
	for (int k = 1; k <= n; k++){
		for (int i = 1; i <= n; i++){
			for (int j = 1; j <= n; j++){
				w[i][j] = (w[i][k] && w[k][j]) || w[i][j];
			}
		}
	}
}
int solve(){
	int ans = n;
	for (int i = 1; i <= n; i++){
		mem(vis, 0);
		if (dfs(i))ans--;
	}
	return ans;
}
int main()
{
	mem(w, 0);
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= m; i++){
		int x, y;
		scanf("%d %d", &x, &y);
		w[x][y] = 1;
	}
	pre_work();
	printf("%d\n", solve());
	return 0;
}

 

Publicados 204 artículos originales · elogios ganado 13 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_43701790/article/details/104731791
Recomendado
Clasificación