POJ1287(最小生成树入门题)
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 7753 | Accepted: 4247 |
Description
Your task is to design the network for the area, so that there is a connection (direct or indirect) between every two points (i.e., all the points are interconnected, but not necessarily by a direct cable), and that the total length of the used cable is minimal.
Input
The maximal number of points is 50. The maximal length of a given route is 100. The number of possible routes is unlimited. The nodes are identified with integers between 1 and P (inclusive). The routes between two points i and j may be given as i j or as j i.
Output
Sample Input
1 0 2 3
1 2 37
2 1 17
1 2 68 3 7
1 2 19
2 3 11
3 1 7
1 3 5
2 3 89
3 1 91
1 2 32 5 7
1 2 5
2 3 7
2 4 8
4 5 11
3 5 10
1 5 6
4 2 12 0
Sample Output
0
17
16
26
赤裸裸的最小生成树问题,下面用三种方式分别实现。
/*
Kruskal 1287 Accepted 420K 16MS G++
*/
#include"cstdio"
#include"algorithm"
using namespace std;
const int MAXN=;
struct Edge{
int u,v,cost;
}es[MAXN];
bool comp(const Edge &a,const Edge &b)
{
return a.cost < b.cost;
} int par[MAXN];
int rnk[MAXN];
void init(int n)
{
for(int i=;i<=n;i++)
{
par[i]=i;
}
} int fnd(int x)
{
if(par[x]==x)
{
return x;
}
return par[x]=fnd(par[x]);
} void unite(int u,int v)
{
int a=fnd(u);
int b=fnd(v);
if(a==b) return ; if(rnk[a]<rnk[b])
{
par[a]=b;
}
else{
par[b]=a;
if(rnk[a]==rnk[b]) rnk[a]++;
}
} bool same(int u,int v)
{
return fnd(u)==fnd(v);
} int main()
{
int V,E;
while(scanf("%d",&V)!=EOF&&V)
{
scanf("%d",&E);
for(int i=;i<E;i++)
{
scanf("%d%d%d",&es[i].u,&es[i].v,&es[i].cost);
}
sort(es,es+E,comp);
init(V);
int ans=;
int cnt=;
for(int i=;i<E;i++)
{
if(!same(es[i].u,es[i].v))
{
unite(es[i].u,es[i].v);
ans+=es[i].cost;
cnt++;
}
if(cnt==V-) break;
}
printf("%d\n",ans);
}
return ;
}
/*
Prim 1287 Accepted 408K 16MS G++
*/
#include"cstdio"
using namespace std;
const int MAXN=;
const int INF=0x3fffffff;
int mp[MAXN][MAXN];
int V,E;
inline int min(int a,int b)
{
return a>b?b:a;
}
int d[MAXN];
int vis[MAXN];
int prim(int s)
{
int ans=;
for(int i=;i<=V;i++)
{
d[i]=mp[s][i];
vis[i]=;
}
d[s]=,vis[s]=;
for(int i=;i<=V-;i++)
{
int mincost,k;
mincost=INF; for(int i=;i<=V;i++)
{
if(!vis[i]&&mincost>d[i])
{
mincost=d[i];
k=i;
}
}
vis[k]=;
ans+=mincost;
for(int i=;i<=V;i++)
{
if(!vis[i]&&d[i]>mp[k][i])
{
d[i]=mp[k][i];
}
}
}
return ans;
} int main()
{
while(scanf("%d",&V)&&V)
{
for(int i=;i<=V;i++)
for(int j=;j<=V;j++)
if(i==j) mp[i][j]=;
else mp[i][j]=INF;
scanf("%d",&E);
for(int i=;i<E;i++)
{
int u,v,co;
scanf("%d%d%d",&u,&v,&co);
mp[u][v]=mp[v][u]=min(mp[u][v],co);
}
printf("%d\n",prim());
} return ;
}
/*
堆优化prim 1287 Accepted 604K 16MS G++
*/
#include"cstdio"
#include"cstring"
#include"queue"
using namespace std;
const int MAXN=;
const int INF=0x3fffffff;
struct Edge{
int to,cost,next;
}es[MAXN];
struct Node{
int d,u;
Node(int cd,int cu):d(cd),u(cu){ }
bool operator<(const Node& a) const
{
return d > a.d;
}
};
int V,E;
int head[];
int cnt;
void add_edge(int u,int v,int co)
{
es[cnt].to=v;
es[cnt].cost=co;
es[cnt].next=head[u];
head[u]=cnt;
cnt++;
}
int d[];
int vis[];
int prim(int s)
{
int ans=;
for(int i=;i<=V;i++)
{
vis[i]=;
d[i]=INF;
}
d[s]=;
priority_queue<Node> que;
que.push(Node(,s));
while(!que.empty())
{
Node no=que.top();que.pop();
int v=no.u;
if(vis[v]) continue;
ans+=no.d;
vis[v]=;
for(int i=head[v];i!=-;i=es[i].next)
{
Edge e=es[i];
if(d[e.to]>e.cost)
{
d[e.to]=e.cost;
que.push(Node(d[e.to],e.to));
}
}
}
return ans;
}
int main()
{
while(scanf("%d",&V)&&V)
{
cnt=;
memset(head,-,sizeof(head));
scanf("%d",&E);
for(int i=;i<E;i++)
{
int u,v,co;
scanf("%d%d%d",&u,&v,&co);
add_edge(u,v,co);
add_edge(v,u,co);
} int ans=prim();
printf("%d\n",ans);
}
return ;
}
POJ1287(最小生成树入门题)的更多相关文章
- hdu 3695:Computer Virus on Planet Pandora(AC自动机,入门题)
Computer Virus on Planet Pandora Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 256000/1280 ...
- poj 2524:Ubiquitous Religions(并查集,入门题)
Ubiquitous Religions Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 23997 Accepted: ...
- poj 3984:迷宫问题(广搜,入门题)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7635 Accepted: 4474 Description ...
- hdu 1754:I Hate It(线段树,入门题,RMQ问题)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- poj 3254 状压dp入门题
1.poj 3254 Corn Fields 状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相 ...
- zstu.4194: 字符串匹配(kmp入门题&& 心得)
4194: 字符串匹配 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 206 Solved: 78 Description 给你两个字符串A,B,请 ...
- hrbustoj 1073:病毒(并查集,入门题)
病毒Time Limit: 1000 MS Memory Limit: 65536 KTotal Submit: 719(185 users) Total Accepted: 247(163 user ...
- hdu 1465:不容易系列之一(递推入门题)
不容易系列之一 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
基础数据结构——顺序表(2) Time Limit: 1000 MS Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...
随机推荐
- 【Linux】OpenWRT的无线设置注意事项——从2.4G到5G,hwmode不简单
硬件说明: 操作系统:OpenWRT 网卡:AR9220R52Hn 网卡驱动:ath9k OpenWRT在刷机完成之后,并不会自动开启无线功能,需要手动修改配置文件,然后重启网络服务.管理无线功能的配 ...
- error_logger 爆炸
具有讽刺意味的是,负责错误日志的进程竟然是最为脆弱的之一.在Erlang的缺省安装中,error_logger39负责记录日志(写入磁盘或者发送到网络上),它的速度要比错误产生的速度慢得多.尤其是在记 ...
- Android studio 混淆打包问题
参考 : Android Studio代码混淆设置以及上传mapping文件 AndroidStudio 混淆打包 在app 目录下 proguard-rules.pro中加入 通用 混淆 #指定代 ...
- Intellj IDEA光标替insert状态,back键无法删除内容
Intellj IDEA光标为insert状态,无法删除内容导入项目后,发现打开java文件的光标是win系统下按了insert键后的那种宽的光标,并且还无法删除内容,且按删除(delete)键也只见 ...
- hdu2473 Junk-Mail Filter 并查集+删除节点+路径压缩
Description Recognizing junk mails is a tough task. The method used here consists of two steps: 1) ...
- android菜鸟学习笔记11----Intent的两点补充
关于Intent的两点补充: 1.隐式Intent启动组件,会有一个Intent解析的过程,若找不到能够处理该Intent的组件,程序就会异常终止.一个合理的做法是,在使用Intent实例启动组件如: ...
- 绿色版Tomcat的配置
在环境变量中不配置JAVA_HOME或者JRE_HONE的情况下(正确配置java的路径)不影响java的使用 可以正常使用 java -version .... 但是这种情况下 无法在Tomcat的 ...
- C#使用tesseract3.02识别验证码模拟登录(转)
转自http://www.cnblogs.com/JinJi-Jary/p/5625414.html
- Eclipse:Could not create the view: Plug-in org.eclipse.jdt.ui was unable to load class org.eclipse.
今天电脑死机了2次,重启电脑开eclipse后,发现项目环境坏了.百度后得到的答案是删除.metadata目录.但觉得麻烦,后在stackoverflow发现最佳的方式是 把 .metadata/.p ...
- Django创建模型_模型层
1.在项目Mysite下创建应用bms 2.在bms下的models.py文件中创建模型 from django.db import models # Create your models here. ...