Question link
Question: On a directed graph, how many robots can traverse the entire graph (each vertex can be traversed repeatedly )?
Idea: deformation of the minimum path coverage. Because vertices can be traversed repeatedly, you need to use floyd to re-create the graph and then use the minimum path coverage.
Code:
# Include <iostream> # include <cstdio> # include <cstring> # include <vector> # include <algorithm> using namespace std; const int MAXN = 1005; int g [MAXN] [MAXN]; int linker [MAXN]; bool used [MAXN]; int n, m; bool dfs (int u) {for (int v = 1; v <= n; v ++) {if (g [u] [v] &! Used [v]) {used [v] = true; if (linker [v] =-1 | dfs (linker [v]) {linker [v] = u; return true ;}} return false ;}int hungary () {int res = 0; memset (linker,-1, sizeof (linker); for (int u = 1; u <= n; u ++) {memset (used, false, sizeof (used )); if (dfs (u) res ++;} return res ;}int main () {while (scanf ("% d", & n, & m) & n) {memset (g, 0, sizeof (g); int u, v; for (int I = 0; I <m; I ++) {scanf ("% d", & u, & v); g [u] [v] = 1 ;}for (int k = 1; k <= n; k ++) {for (int I = 1; I <= n; I ++) {for (int j = 1; j <= n; j ++) {g [I] [j] | = (g [I] [k] & g [k] [j]) ;}} printf ("% d \ n ", n-hungary ();} return 0 ;}
POJ2594-Treasure deformation (minimum path coverage deformation)