dfs判断连通块的数量,prim算法建立最小生成树并判断是否唯一~

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
const int inf=1e9;
int g[maxn][maxn];
int d[maxn];
int visit[maxn];
int N,M;
struct edge {
int v1,v2;
};
vector<edge> vi;
void dfs (int s) {
visit[s]=true;
for (int i=;i<=N;i++)
if (g[s][i]!=inf&&visit[i]==false) dfs(i);
}
int dfsTrave () {
int block=;
for (int i=;i<=N;i++) {
if (visit[i]==false) {
dfs(i);
block++;
}
}
return block;
}
int flag=;
int prim (int s) {
fill (d,d+maxn,inf);
fill (visit,visit+maxn,);
d[s]=;
int ans=;
for (int i=;i<=N;i++) {
int u=-,min=inf;
for (int j=;j<=N;j++)
if (visit[j]==false&&d[j]<min) {
u=j;
min=d[j];
}
if (u==-) return -;
visit[u]=;
ans+=d[u];
int num=;
for (int v=;v<=N;v++)
if (visit[v]&&g[u][v]==min) num++;
if (num>) flag++;
for (int v=;v<=N;v++) {
if (visit[v]==false&&g[u][v]!=inf&&g[u][v]<d[v])
d[v]=g[u][v];
}
}
return ans;
}
int main () {
scanf ("%d %d",&N,&M);
int u,v;
for (int i=;i<=N;i++)
for (int j=;j<=N;j++)
g[i][j]=inf;
for (int i=;i<M;i++) {
scanf ("%d %d",&u,&v);
scanf ("%d",&g[u][v]);
g[v][u]=g[u][v];
}
int block=dfsTrave ();
if (block>) {
printf ("No MST\n");
printf ("%d",block);
return ;
}
fill (visit,visit+maxn,false);
int mst=prim();
printf ("%d\n",mst);
if (flag==) printf ("Yes");
else printf ("No");
return ;
}

最新文章

  1. 深入Java虚拟机--判断对象存活状态
  2. HTML页面meta标签内容详解
  3. loadrunner 功能详解(一) - Run-time Settings
  4. hdu 1850 Being a Good Boy in Spring Festival 博弈论
  5. java 学习基础学习单词及java关键词
  6. python-增删改查
  7. [转] 详细整理:UITableView优化技巧
  8. 【PAT L2-001】最短路计数
  9. android 拍照 onCreate() 调用两次的问题
  10. 牛逼的验证码,printf返回值
  11. Project 3:N级魔方阵
  12. Combiners和Partitioner编程
  13. 长图的展开与收起(Android)
  14. 前端笔记之JavaScript(三)关于条件判断语句、循环语句那点事
  15. 在树莓派3B、Ubuntu 18.04关闭板载Wifi、蓝牙
  16. ubuntu “无法获得锁 /var/lib/dpkg/lock -open”
  17. 第八周--Linux中进程调度与进程切换的过程
  18. URLConnection 和 HttpClients 发送请求范例【原】
  19. P4822 [BJWC2012]冻结
  20. 关于Java实现的进制转化(位运算)

热门文章

  1. 方便的 IcoMoon 图标字体
  2. opencv python:轮廓发现
  3. Flex布局如何实现最后一个元素右对齐(CSS)
  4. 吴裕雄 python 机器学习——模型选择回归问题性能度量
  5. leetcode929 Unique Email Addresses
  6. Spring基础篇——通过Java注解和XML配置装配bean(转载)
  7. 拥抱高通的联想,真的能靠5G突围?
  8. Numpy Pandas
  9. 【译】高级T-SQL进阶系列 (七)【上篇】:使用排序函数对数据进行排序
  10. 如何在Windows中使用Eclipse访问虚拟机Linux系统中的hadoop(伪分布式)