昂贵的婚礼

http://blog.csdn.net/qq_21899803/article/details/52004901

http://blog.csdn.net/helloiamclh/article/details/47956489 

package aaa;

import java.util.*;

public class Main {
    static Scanner in = new Scanner(System.in);
    static final int INF = 0x3f3f3f3f;
    static final int MAXN = 110;
    static int cost[][] = new int[MAXN][MAXN];  
    static int[] vis = new int[MAXN];
    static int[] dis = new int [MAXN];
    static int[] price =  new int[MAXN];
    static int[] level = new int[MAXN];  
	static int n, m, p, l, x, t, v, ans; 
	
    static int dijkstra()  {  
	    for(int i = 0; i < n; i++)  
	        dis[i] = price[i];  
	    for(int i = 0; i < n; i++){  
	        int min = INF, k = -1;  
	      for(int j = 0; j < n; j++) {  
	         if(vis[j]==0 && dis[j] < min)  
	               min = dis[j]; 
	                k=j;
	        }  
	        vis[k] = 1;  
	        for(int j = 0; j < n; j++)  
	            if(dis[k] + cost[k][j] < dis[j] && vis[j]==0)  
	                 dis[j] = dis[k] + cost[k][j];  
	    }  
	    return dis[0];  
	} 
	public static void main(String[] args) {
		   ans = INF;
		while(in.hasNext()){
			m=in.nextInt();
			n=in.nextInt();			            
            Arrays.fill(vis, 0);
            Arrays.fill(price, 0);
            Arrays.fill(level, 0);
            for (int i = 0; i < cost.length; i++) {
				for (int j = 0; j < cost[i].length; j++) {
					cost[i][j]=0;
				}
			}
           for(int i = 0; i < n; i++) {  
        	   price[i]=in.nextInt();
        	   level[i]=in.nextInt();
        	   x=in.nextInt();
              for(int j = 0; j < x; j++) {  
            	  t=in.nextInt();
            	  v=in.nextInt();
                  cost[t-1][i] = v;  
			       }  
		   }  
           int sum=0;
			for(int i = 0; i < n; i++){  
			   int ml = level[i]; 
			  for(int j = 0; j < n; j++){  
			      if(level[j] - ml > m || ml > level[j])  
			           vis[j] = 1;  
			       else  
			           vis[j] = 0;  
			      }  
			    int now = dijkstra();  
			    sum+=now;
			    ans = Math.min(ans, now);
		}  
          System.out.println(sum);
	  }
	}
}


 

package aaa;

import java.util.*;

public class Main {
    static Scanner in = new Scanner(System.in);
    static final int INF = 0x3f3f3f3f;
    static final int MAXN = 110;
    static int cost[][] = new int[MAXN][MAXN];  
    static int[] vis = new int[MAXN];
    static int[] dis = new int [MAXN];
    static int[] price =  new int[MAXN];
    static int[] level = new int[MAXN];  
	static int n, m, p, l, x, t, v, ans; 
	
    static int dijkstra()  {  
	    for(int i = 0; i < n; i++)  
	        dis[i] = price[i];  
	    for(int i = 0; i < n; i++){  
	        int min = INF, k = -1;  
	      for(int j = 0; j < n; j++) {  
	         if(vis[j]==0 && dis[j] < min)  
	               min = dis[j]; 
	                k=j;
	        }  
	        vis[k] = 1;  
	        for(int j = 0; j < n; j++)  
	            if(dis[k] + cost[k][j] < dis[j] && vis[j]==0)  
	                 dis[j] = dis[k] + cost[k][j];  
	    }  
	    return dis[0];  
	} 
	public static void main(String[] args) {
		   ans = INF;
		while(in.hasNext()){
			m=in.nextInt();
			n=in.nextInt();			            
            Arrays.fill(vis, 0);
            Arrays.fill(price, 0);
            Arrays.fill(level, 0);
            for (int i = 0; i < cost.length; i++) {
				for (int j = 0; j < cost[i].length; j++) {
					cost[i][j]=0;
				}
			}
           for(int i = 0; i < n; i++) {  
        	   price[i]=in.nextInt();
        	   level[i]=in.nextInt();
        	   x=in.nextInt();
              for(int j = 0; j < x; j++) {  
            	  t=in.nextInt();
            	  v=in.nextInt();
                  cost[t-1][i] = v;  
			       }  
		   }  
           int sum=0;
			for(int i = 0; i < n; i++){  
			   int ml = level[i]; 
			  for(int j = 0; j < n; j++){  
			      if(level[j] - ml > m || ml > level[j])  
			           vis[j] = 1;  
			       else  
			           vis[j] = 0;  
			      }  
			    int now = dijkstra();  
			    sum+=now;
			    ans = Math.min(ans, now);
		}  
          System.out.println(sum);
	  }
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值