Air Raid
#include <iostream> #include <cstring> using namespace std; #define SIZE 150 int n; int map[SIZE][SIZE]; int visited[SIZE]; int match[SIZE]; int Hungary(int u){ //hungary匈牙利 int i; for(i = 1; i <= n; i++){ if(!visited[i] && map[u][i]){ visited[i] = 1; if(match[i] == 0 || Hungary(match[i])){ match[i] = u; return 1; } } } return 0; } int main(){ int iCase; int m, from, to, i; cin>>iCase; while(iCase--){ memset(map, 0, sizeof(map)); memset(match, 0, sizeof(match)); cin>>n>>m; for(i = 0; i < m; i++){ cin>>from>>to; map[from][to] = 1; } int ans = 0; for(i = 1; i <= n; i++){ memset(visited, 0, sizeof(visited)); if(Hungary(i)) ans++; } cout<<n - ans<<endl; } return 0; }