JSOI 2008 星球大战
来源:互联网 发布:数控编程人员工资待遇 编辑:程序博客网 时间:2024/05/02 04:28
倒着做并查集
模块的统计方法比较巧妙
import java.util.*;import java.io.*;class edge{ int x,y,next; public edge(int a, int b, int c){ x=a;y=b;next=c; }}class problem12{ int n,m,k; int header[]; edge arr[]; int table[]; int target[]; int total; void solver() throws IOException{ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(reader.readLine().trim()); n = Integer.parseInt(st.nextToken()); m = Integer.parseInt(st.nextToken()); header = new int[n]; arr = new edge[2*m]; table = new int[n]; for(int i=0;i<n;i++){ table[i] = i; } int index = 0; Arrays.fill(header, -1); for(int i=0;i<m;i++){ st = new StringTokenizer(reader.readLine().trim()); int x = Integer.parseInt(st.nextToken()); int y = Integer.parseInt(st.nextToken()); arr[index] = new edge(x,y,header[x]); header[x] = index++; arr[index] = new edge(y,x,header[y]); header[y] = index++; } k = Integer.parseInt(reader.readLine().trim()); target = new int[k]; int result[] = new int[k+1]; for(int i=0;i<k;i++){ int tmp = Integer.parseInt(reader.readLine().trim()); target[i] = tmp; table[tmp] = -1; } total = n-k; for(int i=0;i<2*m;i++){ if(table[arr[i].x]!=-1&&table[arr[i].y]!=-1){ union(arr[i].x,arr[i].y); } } result[k] = total; for(int i=k-1;i>=0;i--){ int node = target[i]; table[node] = node; total++; for(int j=header[node];j!=-1;j=arr[j].next){ if(table[arr[j].y]!=-1){ union(arr[j].x, arr[j].y); } } result[i] = total; } for(int i=0;i<k+1;i++){ System.out.println(result[i]); } } void union(int x, int y){ x=find(x); y=find(y); if(x==y) return; if(x<y) table[y]=x; else table[x]=y; total--; } int find(int x){ if(table[x]!=x&&table[x]>=0){ table[x] = find(table[x]); } return table[x]; }}public class tour{ public static void main (String [] args) throws Exception { problem12 p = new problem12(); p.solver(); }}
0 0
- JSOI 2008 星球大战
- 【JSOI 2008】星球大战starwar 离线+并查集
- JSOI 2008-help
- 星球大战
- 星球大战
- 【JSOI 2008】【BZOJ 1014】火星人prefix
- 【JSOI 2008】【BZOJ 1017】魔兽地图DotR
- 【BZOJ 1012】【JSOI 2008】最大数maxnumber
- 【BZOJ 1012】【JSOI 2008】最大数
- JSOI 2008 火星人prefix Splay+hash
- JSOI 2008 火星人prefix Splay+hash+Binary_Search
- BZOJ 1013 [JSOI 2008] 高斯消元 解题报告
- [BZOJ]1014 [JSOI]2008 火星人prefix Splay
- BZOJ 1012 JSOI 2008 最大数 maxnumber 线段树水题
- 【BZOJ 1013】【JSOI 2008】球形空间产生器sphere
- [BZOJ 1012] JSOI 2008 最大数maxnumber · 线段树
- BZOJ 1570 JSOI 2008 Blue Mary的旅行 网络流
- 【JSOI 2008】【BZOJ 1016】最小生成数计数
- java多线程问题中死锁的一个实现
- java web 简析--学习计划
- backbone.js练习
- LeetCode 38 Count and Say(C,C++,Java,Python)
- HDU 4658 Integer Partition
- JSOI 2008 星球大战
- 黑马程序员——1,JAVA基础:认识JAVA
- iOS中的MVC设计模式
- ACM小组的古怪象棋
- Linux下Pomelo环境配置
- 教女友学PHP之HTML①
- ConcurrentHashMap原理解析
- 教女友学PHP之HTML②
- 微博项目建表练习