import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
StreamTokenizer cin = new StreamTokenizer(new BufferedInputStream(System.in));
InputReader in = new InputReader(System.in) ;
PrintWriter out = new PrintWriter(System.out) ;
int t = in.nextInt() ;
for(int i = 1 ; i <= t ; i++)
new Task().solve(in , out);
out.flush() ;
}
}
class Task{
ArrayList<Integer>[] adj ;
int[] color ;
int[] sum ;
int ans1 , ans2 ;
boolean dfs(int u , int c){
color[u] = c ;
sum[c]++ ;
for(int v : adj[u]){
if(color[v] == -1){
if(! dfs(v , c^1)) return false ;
}
else if(color[v] == color[u]) return false ;
}
return true ;
}
boolean helper(){
sum = new int[2] ;
sum[0] = sum[1] = 0 ;
ans1 = 0 ; ans2 = 0 ;
for(int i = 1 ; i <= n ; i++){
if(color[i] != -1) continue ;
int c0 = sum[0] , c1 = sum[1] ;
if(! dfs(i , 0)) return false ;
ans1 += Math.max(sum[0] - c0 , sum[1] - c1 ) ;
ans2 += Math.min(sum[0] - c0 , sum[1] - c1 ) ;
}
if(ans2 == 0){
ans1-- ;
ans2++ ;
}
if(ans1 < 1 || ans2 < 1) return false ;
return true ;
}
int n ;
public void solve(InputReader in , PrintWriter out){
n = in.nextInt() ;
int m = in.nextInt() ;
adj = new ArrayList[n+1] ;
for(int i = 1 ; i <= n ; i++) adj[i] = new ArrayList<Integer>() ;
color = new int[n+1] ;
Arrays.fill(color, -1) ;
for(int i = 0 ; i < m ; i++){
int u = in.nextInt() ;
int v = in.nextInt() ;
adj[u].add(v) ;
adj[v].add(u) ;
}
if(helper()) out.println(ans1 + " " + ans2) ;
else out.println("Poor wyh") ;
// out.flush();
}
}
class InputReader{
public BufferedReader reader;
public StringTokenizer tokenizer;
public InputReader(InputStream stream){
reader = new BufferedReader(new InputStreamReader(stream), 32768);
tokenizer = null;
}
public String next(){
while(tokenizer == null || !tokenizer.hasMoreTokens()){
try{
tokenizer = new StringTokenizer(reader.readLine());
}catch (IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
}
hdu5285黑白染色二分最大匹配
最新推荐文章于 2015-08-15 17:27:38 发布