poj 2394 Checking an Alibi

裸的最短路徑,實在太水了,不過1Y也是不容易的

還是少刷點水題吧

/*
ID: daniel.20
LANG: JAVA
TASK: fence8
*/

import java.io.*;
import java.math.BigInteger;
import java.util.*;

class problem{
    int f,p,c,m;
    int cow[];
    int g[][];
    void solver() throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(reader.readLine());
        f = Integer.valueOf(st.nextToken());
        p = Integer.valueOf(st.nextToken());
        c = Integer.valueOf(st.nextToken());
        m = Integer.valueOf(st.nextToken());
        cow = new int[c];
        g = new int[f+1][f+1];
        for(int i=0;i<f+1;i++)
            Arrays.fill(g[i], Integer.MAX_VALUE);
        for(int i=0;i<p;i++){
            st = new StringTokenizer(reader.readLine());
            int from = Integer.valueOf(st.nextToken());
            int to = Integer.valueOf(st.nextToken());
            int len = Integer.valueOf(st.nextToken());
            if(g[from][to]>len) g[from][to]=len;
            if(g[to][from]>len) g[to][from]=len;
        }
        for(int i=0;i<c;i++){
            cow[i]=Integer.valueOf(reader.readLine());
        }
        dijkstra();
    }
    void dijkstra(){
        boolean vis[] = new boolean[f+1];
        int dis[] = new int[f+1];
        Arrays.fill(dis, 999999999);
        dis[1]=0;
        for(int i=0;i<f;i++){
            int min = 999999999;
            int min_node = -1;
            for(int j=1;j<=f;j++){
                if(!vis[j]&&dis[j]<min){
                    min=dis[j];min_node=j;
                }
            }
            if(min_node==-1) break;
            vis[min_node]=true;
            for(int j=1;j<=f;j++){
                if(g[min_node][j]!=Integer.MAX_VALUE&&dis[j]>dis[min_node]+g[min_node][j]){
                    dis[j]=dis[min_node]+g[min_node][j];
                }
            }
        }
        int count=0;
        StringBuilder sb= new StringBuilder();
        for(int i=0;i<c;i++){
            if(dis[cow[i]]<=m){
                count++; sb.append(i+1).append("\n");
            }
        }
        System.out.println(count);
        System.out.println(sb.toString());
    }
}
public class fence8 {
    public static void main (String [] args) throws Exception {
        problem p = new problem();
        p.solver();
    }
}


發佈了245 篇原創文章 · 獲贊 0 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章