POJ 1258 Agri-Net|| POJ 2485 Highways MST
2024-08-31 18:57:17
POJ 1258 Agri-Net
http://poj.org/problem?id=1258
水题。
题目就是让你求MST,连矩阵都给你了。
prim版
#include<cstdio>
const int MAXN=101;
const int INF=100000+10;
int map[MAXN][MAXN];
int dis[MAXN];
int n; void prim()
{
bool vis[MAXN]={0};
for(int i=0;i<=n;i++)
dis[i]=INF; int cur=1;
vis[cur]=1;
dis[cur]=0; for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(!vis[j] && dis[j] > map[cur][j])
dis[j]=map[cur][j]; int mini=INF;
for(int j=1;j<=n;j++)
if(!vis[j] && dis[j] <mini)
mini=dis[cur=j]; vis[cur]=1;
}
} int main()
{ while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&map[i][j]); prim();
int ans=0;
for(int i=1;i<=n;i++)
ans+=dis[i]; printf("%d\n",ans);
} return 0;
}
kruskal
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=101;
const int INF=100000+10;
int fa[MAXN];
int n; struct data
{
int x,y;
int dis;
}a[MAXN*MAXN];
bool operator< (const data& c,const data &d)
{
return c.dis<d.dis;
} int find(int cur)
{
return cur==fa[cur]? cur:fa[cur]=find(fa[cur]);
} int main()
{ while(~scanf("%d",&n))
{
int len=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&a[len].dis);
a[len].x=i;
a[len].y=j;
len++;
} sort(a,a+len);
int ans=0;
for(int i=1;i<=n;i++)
fa[i]=i; for(int i=0;i<len;i++)
{
int rootx=find(a[i].x);
int rooty=find(a[i].y);
if(rootx!=rooty)
{
fa[rootx]=rooty;
ans+=a[i].dis;
} }
printf("%d\n",ans);
} return 0;
}
-------------------------------------------------我是可爱的分割线-------------------------------------------------
poj2485 Highways
http://poj.org/problem?id=2485
题目要求求MST上最长的边。
上面的代码一改就过了。。。。
prim
#include<cstdio>
const int MAXN=520;
const int INF=100000+10;
int map[MAXN][MAXN];
int dis[MAXN];
int n; void prim()
{
bool vis[MAXN]={0};
for(int i=0;i<=n;i++)
dis[i]=INF; int cur=1;
vis[cur]=1;
dis[cur]=0; for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(!vis[j] && dis[j] > map[cur][j])
dis[j]=map[cur][j]; int mini=INF;
for(int j=1;j<=n;j++)
if(!vis[j] && dis[j] <mini)
mini=dis[cur=j]; vis[cur]=1;
}
} int main()
{ int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&map[i][j]); prim();
int ans=0;
for(int i=1;i<=n;i++)
{
if(ans < dis[i])
ans=dis[i];
} printf("%d\n",ans);
} return 0;
}
kruskal
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=520;
const int INF=100000+10;
int fa[MAXN];
int n; struct data
{
int x,y;
int dis;
}a[MAXN*MAXN];
bool operator< (const data& c,const data &d)
{
return c.dis<d.dis;
} int find(int cur)
{
return cur==fa[cur]? cur:fa[cur]=find(fa[cur]);
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int len=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&a[len].dis);
a[len].x=i;
a[len].y=j;
len++;
} sort(a,a+len);
int ans=0;
for(int i=1;i<=n;i++)
fa[i]=i; for(int i=0;i<len;i++)
{
int rootx=find(a[i].x);
int rooty=find(a[i].y);
if(rootx!=rooty)
{
fa[rootx]=rooty;
ans=a[i].dis;
} }
printf("%d\n",ans);
} return 0;
}
最新文章
- 在Ubuntu 12.4 下安装 nginx, MySQL, PHP
- c++中resize函数怎么用
- Centos6.6下安装MySQL5.6
- [CentOs7]图形界面
- QtCreator下运行opencv出现realloc():pointer invalid
- phpcms v9调用多个栏目下文章的方法
- hadoop单节点windows 7 环境搭建
- nginx reload
- stdcall与cdecl的区别
- BZOJ 4597 随机序列
- Oracle 的证也会过期咯
- Android再学习-20141111-Android应用的七大件
- flex 用footerdatagrid做列的汇总合计
- AngularJS学习笔记5
- ThreadLocal源码分析:(二)get()方法
- cesium-navigation 使用(非require,es6引用)
- keepalived 安装及配置
- elastic-job详解(三):Job的手动触发功能
- 如何在 ajax 外拿到 ajax 的数据???和ajax的参数
- VS2010安装项目程序打包操作详解
热门文章
- ActiveMQ学习总结(2)——ActiveMQ入门实例教程
- error c2572重定义默认參数
- 南阳oj 士兵杀敌(二) 题目116 NYOJ 数据结构
- Linux下进程终止过程
- php课程 18-60 cookie和session的最主要区别是什么
- BZOJ2244: [SDOI2011]拦截导弹(CDQ分治,二维LIS,计数)
- vector转数组
- KNIMI数据挖掘建模与分析系列_002_利用KNIMI做商超零售关联推荐
- Relaxation step(Dijkstra's 最短路径算法)
- HTML基础-第一讲