HDU 1233 还是畅通工程 (最小生成树、并查集)
2017-11-13 20:25
429 查看
VJ题目链接
题意题目都很简单,最小生成树,然后用并查集来判断是否已经连入图中
import java.util.PriorityQueue;
import java.util.Scanner;
class Road implements Comparable<Road>{
int a,b,dis;
public Road(int a,int b,int dis) {
this.a=a;
this.b=b;
this.dis=dis;
}
@Override
public int compareTo(Road o) {
if(dis!=o.dis) {
return dis-o.dis;
}else {
if(a!=o.a)
return a-o.a;
else
return b-o.b;
}
}
}
public class Main{
static Scanner sc = new Scanner(System.in);
static int n,m,cnt;
static int [] dad;
static PriorityQueue<Road> pq=new PriorityQueue<Road>();
static void init() {
cnt=0;
for(int i=1;i<=n;i++)
dad[i]=i;
}
static int find(int x) {
if(x==dad[x]) return x;
else {
dad[x]=find(dad[x]);
return dad[x];
}
}
static void union(int x,int y) {
int dx=find(x);
int dy=find(y);
if(dx==dy) {return;}
if(dx>dy)
dad[dx]=dy;
else
dad[dy]=dx;
}
public static void main(String[] args) {
while(sc.hasNext()) {
n=sc.nextInt();
if(n==0) break;
dad=new int[n+1];
init();
pq.clear();
int len=n*(n-1)/2;
for(int i=0;i<len;i++) {
pq.add(new Road(sc.nextInt(),sc.nextInt(),sc.nextInt()));
}
Road tmp;
while(!pq.isEmpty()) {
tmp=pq.poll();
if(find(tmp.a)==find(tmp.b)) continue;
else {
union(tmp.a,tmp.b);
cnt+=tmp.dis;
}
}
System.out.println(cnt);
}
System.exit(0);
}
}
题意题目都很简单,最小生成树,然后用并查集来判断是否已经连入图中
import java.util.PriorityQueue;
import java.util.Scanner;
class Road implements Comparable<Road>{
int a,b,dis;
public Road(int a,int b,int dis) {
this.a=a;
this.b=b;
this.dis=dis;
}
@Override
public int compareTo(Road o) {
if(dis!=o.dis) {
return dis-o.dis;
}else {
if(a!=o.a)
return a-o.a;
else
return b-o.b;
}
}
}
public class Main{
static Scanner sc = new Scanner(System.in);
static int n,m,cnt;
static int [] dad;
static PriorityQueue<Road> pq=new PriorityQueue<Road>();
static void init() {
cnt=0;
for(int i=1;i<=n;i++)
dad[i]=i;
}
static int find(int x) {
if(x==dad[x]) return x;
else {
dad[x]=find(dad[x]);
return dad[x];
}
}
static void union(int x,int y) {
int dx=find(x);
int dy=find(y);
if(dx==dy) {return;}
if(dx>dy)
dad[dx]=dy;
else
dad[dy]=dx;
}
public static void main(String[] args) {
while(sc.hasNext()) {
n=sc.nextInt();
if(n==0) break;
dad=new int[n+1];
init();
pq.clear();
int len=n*(n-1)/2;
for(int i=0;i<len;i++) {
pq.add(new Road(sc.nextInt(),sc.nextInt(),sc.nextInt()));
}
Road tmp;
while(!pq.isEmpty()) {
tmp=pq.poll();
if(find(tmp.a)==find(tmp.b)) continue;
else {
union(tmp.a,tmp.b);
cnt+=tmp.dis;
}
}
System.out.println(cnt);
}
System.exit(0);
}
}
相关文章推荐
- 【最小生成树】+【并查集】-HDU-1233-还是畅通工程
- hdu 1233 还是畅通工程 最小生成树Kruskal算法(并查集)
- hdu 1233(还是畅通工程)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)
- HDU 1233 还是畅通工程 最小生成树Kruskal算法/并查集
- HDU--1233:还是畅通工程 (并查集 & 最小生成树Prim)
- hdu 1233 还是畅通工程 (最小生成树,prim,优先队列,kruskal并查集)
- HDU 1233 还是畅通工程 最小生成树K算法 并查集
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
- HDU 1233.还是畅通工程【最小生成树 kruskal算法(并查集)+prim算法】【1月8】
- hdu 1233 还是畅通工程 (最小生成树)
- hdu 1233 还是畅通工程 (最小生成树)
- (最小生成树)HDU 1233 还是畅通工程
- HDU 1233 还是畅通工程 (最小生成树)
- HDU 1233 还是畅通工程 [最小生成树]
- (step6.1.5)hdu 1233(还是畅通工程——最小生成树)
- 还是畅通工程 【hdu-1233】 【最小生成树】
- HDU 1233 还是畅通工程 (很简单的并查集&&最小生成数)
- HDU--1233 还是畅通工程 (最小生成树) Kruskal算法