Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
谢谢各位帮忙,可是我的程序还是WA,那位请给看一看,不胜感激!import java.io.*; import java.util.*; class GirlsAndBoys { static int num_student, num_match; static int[][] relation; static int[] gender, mate; static boolean[] visited; static boolean loadRelationship(BufferedReader input) throws IOException { String line = input.readLine(); if ( line==null || line.length()==0 ) return false; num_student = Integer.parseInt(line); relation = new int[num_student][]; for ( int i=0; i<num_student; i++ ) { // load into adjacency list StringTokenizer tokens = new StringTokenizer(input.readLine(), " :()"); int id = Integer.parseInt(tokens.nextToken()); int num = Integer.parseInt(tokens.nextToken()); relation[id] = new int[num]; for ( int j=0; j<num; j++ ) relation[id][j] = Integer.parseInt(tokens.nextToken()); } return true; } static void labelGender() { LinkedList<Integer> queue = new LinkedList<Integer>(); for ( int s=0; s<num_student; s++ ) if ( gender[s] == 0 ) { // if not assigned gender[s] = 1; // set to boy queue.add(new Integer(s)); while ( ! queue.isEmpty() ) { int t = queue.remove(0).intValue(); for ( int i=0; i<relation[t].length; i++ ) if ( gender[relation[t][i]] == 0 ) { gender[relation[t][i]] = - gender[t]; queue.add(new Integer(relation[t][i])); } } } } static boolean findPath(int start) { for ( int i=0; i<relation[start].length; i++ ) if ( ! visited[relation[start][i]] ) { visited[relation[start][i]] = true; int next = mate[relation[start][i]]; if ( next==-1 || findPath(next) ) { mate[relation[start][i]] = start; mate[start] = relation[start][i]; return true; } } return false; } static void hungarianMatch() { for ( int s=0; s<num_student; s++ ) if ( gender[s]==-1 && mate[s]==-1 ) { // only start from unmatched girl Arrays.fill(visited, false); if ( findPath(s) ) num_match ++; } } public static void main (String[] args) throws IOException { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); while ( loadRelationship(input) ) { num_match = 0; gender = new int[num_student]; visited = new boolean[num_student]; mate = new int[num_student]; Arrays.fill(mate, -1); labelGender(); hungarianMatch(); System.out.println(num_student-num_match); } } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator