usaco 4.2.2 The Perfect Stall

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

import java.util.*;
import java.io.*;

class problem3{
    StringBuilder sb = new StringBuilder();
    int[][] map = new int[500][500];
    boolean vis[];
    void solver() throws IOException{    
        long start = System.currentTimeMillis();
        BufferedReader reader = new BufferedReader(new FileReader("stall4.in"));
        PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("stall4.out")));    
        StringTokenizer st = new StringTokenizer(reader.readLine());
        int n = Integer.valueOf(st.nextToken());
        int m = Integer.valueOf(st.nextToken());
        for(int i=1;i<=n;i++){
            st = new StringTokenizer(reader.readLine());
            int num = Integer.valueOf(st.nextToken());
            while(num-->0){
                int to = Integer.valueOf(st.nextToken());
                map[n+to][i]=1;
            }
        }
        for(int i=n+1;i0){
                map[s][i]-=tmp;
                map[i][s]+=tmp;
                return tmp;
            }
        }
        return 0;
    }
}

public class stall4 {
    public static void main(String[] args) throws Exception {
        problem3 p = new problem3();
        p.solver();
    }
}

跟之前那题比较相似,就是建图建得有点蛋碎

应该是一个m+n+2个点组成的图,前0到N是牛, N+1到N+M+1是牛棚

第0个牛和第N+M+1个棚是额外添加的原点和汇点

所以0th牛到所有棚的距离是1,所有牛(第0个除外)到最后一个棚是1

你可能感兴趣的:(USACO)