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);
}
}
}