博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4514并查集判环+最长路
阅读量:5745 次
发布时间:2019-06-18

本文共 1701 字,大约阅读时间需要 5 分钟。

题意:中文题......

思路:先推断是否能成环,之前以为是有向图,就用了spfa推断,果断过不了自己出的例子,发现是无向图。并查集把,两个点有公共的父节点,那就是成环了,之后便是求最长路了。之前用spfa将权值取反后求最短路,然后结果取正就完事了,仅仅是加个源点0而已,跑一边居然能超时,难道是姿势不正确吗.....,然后用了更暴力的bfs,由于是一个无环的图,所以从一个点出发后。它能走到的点之后便不用再走了,而这个点在bfs中更新距离时每一个点仅仅能入队一次.....这样就快多了。可是我们还须要找到最远的距离的位置在进行一次bfs,由于有这样的情况,1-->2 10,1-->3 5,2-->4 10,从1出发最长距离是20。到4那个点时。然而最长路应该是25,3->1->2->4;所以在进行一次bfs避免这样的情况

#include 
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=1100010;int f[100010],n,m,num,head[100010],dis[100010];int used[100010],vis[100010];struct EDGE{ int to,w,next;}edge[maxn*2];void addedge(int u,int v,int w){ edge[num].to=v; edge[num].w=w; edge[num].next=head[u]; head[u]=num++;}void bfs(int s){ memset(dis,0,sizeof(dis)); memset(vis,0,sizeof(vis)); vis[s]=1;dis[s]=0; queue
que; que.push(s); while(!que.empty()){ int u=que.front();que.pop(); used[u]=1; for(int i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].to; if(vis[v]==0){ vis[v]=1; dis[v]=dis[u]+edge[i].w; que.push(v); } } }}int slove(int s){ int max1=0,pos=s; bfs(s); for(int i=1;i<=n;i++){ if(dis[i]>max1){ pos=i;max1=dis[i]; } } bfs(pos); int ans=0; for(int i=1;i<=n;i++){ if(dis[i]>ans) ans=dis[i]; } return ans;}void init(){ for(int i=0;i<=n;i++) f[i]=i; num=0; memset(head,-1,sizeof(head)); memset(used,0,sizeof(used));}int find1(int x){ int k,r=x,j; while(r!=f[r]) r=f[r]; k=x; while(k!=r){ j=f[k]; f[k]=r;k=j; } return r;}void unite(int a,int b,int c){ int aa=find1(a); int bb=find1(b); f[aa]=bb;}int main(){ int a,b,c; while(scanf("%d%d",&n,&m)!=-1){ init(); int flag=0; for(int i=0;i

转载地址:http://nlxzx.baihongyu.com/

你可能感兴趣的文章
安装EFCodeFirst
查看>>
WPF开发时光之痕日记本——终于完工了。。晒晒截图(三)(已上传安装包)...
查看>>
解决sublime运行python文件无法input问题
查看>>
Gitcafe绑定自定义域名
查看>>
百度地图获取某个城市的经度纬度
查看>>
Django-rest-framework 接口实现 分页:(Pagination) 解析器(Parser) 渲染器(renderer)
查看>>
Class.forName()、Class.forName().newInstance() 、New 三者区别
查看>>
算法导论笔记——第四章 分治策略
查看>>
POJ 2184
查看>>
存储过程简单实例
查看>>
大话 程序猿 眼里的 接口
查看>>
struts2用了哪几种模式
查看>>
replace函数结合正则表达式实现转化成驼峰与转化成连接字符串的方法
查看>>
ubuntu 初学常用命令
查看>>
num+=num 与 num = num+num
查看>>
WCF客户端与服务端通信简单入门教程
查看>>
判断是否含有中文
查看>>
iOS开发UI篇—程序启动原理和UIApplication
查看>>
CAlayer(创建图层)
查看>>
android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )
查看>>