POJ1751 Highways
2016-03-03 13:25
274 查看
题目链接 http://poj.org/problem?id=1751
题目大意:输入n;然后给你n个点的坐标(任意两点之间皆可达);输入m;接下来m行每行输入两个整数x,y表示 点x与点y 已经相连;
问连接所有点至少还需要连接哪些点(并且使连接后总距离最短),并输出连接的点对。
思路:最小生成树,用prim或者kruskal,我是用prim写的,
所以处理已连接的m个点对时,只需将两个点之间的距离设为0即可,这样进行算法时,
会优先处理已连接的点。然后输出点对时,判断下d[i]是否为0,若为0,则是已经连接过的点,否则输出
AC代码:
题目大意:输入n;然后给你n个点的坐标(任意两点之间皆可达);输入m;接下来m行每行输入两个整数x,y表示 点x与点y 已经相连;
问连接所有点至少还需要连接哪些点(并且使连接后总距离最短),并输出连接的点对。
思路:最小生成树,用prim或者kruskal,我是用prim写的,
所以处理已连接的m个点对时,只需将两个点之间的距离设为0即可,这样进行算法时,
会优先处理已连接的点。然后输出点对时,判断下d[i]是否为0,若为0,则是已经连接过的点,否则输出
AC代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> #include <cstring> #include <stack> #include <queue> #include <string> #include <vector> #include <set> #include <map> #define lson root<<1,l,mid #define rson root<<1|1,mid+1,r #define fi first #define se second using namespace std; #define gamma 0.5772156649015328606065120 #define MOD 1000000007 #define inf 0x3f3f3f3f #define N 800 typedef long long LL; typedef pair<int,int> PII; struct COORD { int x,y; } coord ; int n,pic ,path ,vis ,d ; void prim() { memset(vis,0,sizeof(vis)); for(int i=2; i<=n; ++i) d[i]=pic[1][i]; vis[1]=1; for(int j=1; j<n; ++j) { int fm=inf,u; for(int i=2; i<=n; ++i) if(!vis[i]&&d[i]<fm) fm=d[u=i]; vis[u]=1; if(d[u]) //若d[u]==0则是题目中已连接的点,跳过 { if(!path[u]) printf("%d %d\n",1,u); //若path[u]==0则是与点1相连 else printf("%d %d\n",path[u],u); } for(int i=2; i<=n; ++i) if(!vis[i]&&pic[u][i]<d[i]) { path[i]=u; d[i]=pic[u][i]; } } } int main() { int dis,x,y,m; scanf("%d",&n); for(int i=1; i<=n; ++i) scanf("%d%d",&coord[i].x,&coord[i].y); for(int i=1; i<=n; ++i) for(int j=i+1; j<=n; ++j) { dis=(coord[i].x-coord[j].x)*(coord[i].x-coord[j].x)+(coord[i].y-coord[j].y)*(coord[i].y-coord[j].y); pic[i][j]=pic[j][i]=dis; } scanf("%d",&m); for(int i=1; i<=m; ++i) { scanf("%d%d",&x,&y); pic[x][y]=pic[y][x]=0; } memset(path,0,sizeof(path)); //path数组记录点对 prim(); return 0; }
相关文章推荐
- 启动Activity的两种方式startActivity和startActivityForResult(一)
- CSS书写应该注意的情况
- Linux之防火墙------查看操作
- zabbix server is not running: the information displayed may not be current
- ListView 中Item TextView 跑马灯遇到的问题
- android消息机制之二--Handler
- Android showDialog时报错requestFeature() must be called before adding content
- iOS基础--UIView的常见属性
- jquery easyui 怎么动态控制toolbar的显示
- Oracle CDC (Change Data Capture)更新数据捕获——概述
- android:省市县三级联动(基于json和spring)
- Mybatis分库分表扩展插件
- 针对B/S、C/S架构的180个简单测试案例
- 有关HealthKit的那些事
- jQuery中的promise的应用
- python中的三引号
- 关于 iReport 的几个问题
- windows下配置solr4.6.0服务器
- SpringMvc学习心得(一)浅谈spring
- synchronized的用法与注意事项