Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

JAVA 700MS水过,求子树权值和,然后一遍扫描就可以,O(N),贴代码

Posted by yzhw at 2010-08-20 21:42:19 on Problem 3140
Source Code

Problem: 3140  User: yzhw 
Memory: 5480K  Time: 704MS 
Language: Java  Result: Accepted 

Source Code 
import java.io.*;
import java.util.Arrays;
public class Main {
	static final int N=100001;
	static long size[]=new long[N];
    static int g[]=new int[N];
    static int next[]=new int[2*N],v[]=new int[2*N],c=0;
    static long dfs(int pos,int fa)
    {
    	for(int p=g[pos];p!=-1;p=next[p])
    		if(v[p]!=fa)
    			size[pos]+=dfs(v[p],pos);
    	return size[pos];
    }
	public static void main(String[] args) throws IOException{
	      StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
	      int n=0,m=0,count=1;      
	      while(true)
	      {
	    	  in.nextToken();n=(int)in.nval;
	    	  in.nextToken();m=(int)in.nval;
	    	  if(n==0&&m==0) break;
	    	  Arrays.fill(g,-1);
	    	  c=0;
	    	  for(int i=1;i<=n;i++)
	    	  {
	    		  in.nextToken();size[i]=(long)in.nval;
	    	  }
	    	  while((m--)!=0)
	    	  {
	    		  int a,b;
	    		  in.nextToken();a=(int)in.nval;
		    	  in.nextToken();b=(int)in.nval;
		    	  v[c]=b;next[c]=g[a];g[a]=c++;
		    	  v[c]=a;next[c]=g[b];g[b]=c++; 
	    	  }
	    	  dfs(1,1);
	    	  long minnum=size[1];
	    	  for(int i=2;i<=n;i++)
	    		  minnum=Math.min(minnum,Math.abs(size[1]-size[i]-size[i]));
	    	  System.out.println("Case "+(count++)+": "+minnum);	    		  
	      }
	}
}


Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator