点击打开链接

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

思路:先推断是否能成环,之前以为是有向图,就用了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 <queue>
#include <vector>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <functional>
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<int>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<m;i++){
scanf("%d%d%d",&a,&b,&c);
if(find1(a)==find1(b)) flag=1;
unite(a,b,c);
addedge(a,b,c);addedge(b,a,c);
}
if(flag) printf("YES\n");
else{
int ans=-1;
for(int i=1;i<=n;i++){
if(used[i]==0){
ans=max(ans,slove(i));
}
}
printf("%d\n",ans);
}
}
return 0;
}

HDU 4514并查集判环+最长路的更多相关文章

  1. hdu 4514 并查集+树形dp

    湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  2. HDU - 4514 湫湫系列故事——设计风景线(并查集判环)

    题目: 随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n ...

  3. A simple problem(并查集判环)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2497 题意:给定一些点和边的关系,判断S点是否 ...

  4. poj 3310(并查集判环,图的连通性,树上最长直径路径标记)

    题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径 ...

  5. 2019 蓝桥杯国赛 B 组模拟赛 E 蒜头图 (并查集判环)

    思路: 我们看条件,发现满足条件的子图无非就是一些环构成的图, 因为只有形成环,才满足边的两个点都在子图中,并且子图中节点的度是大于0的偶数. 那么如果当前有k个环,我们可以选2^k-1个子图,为什么 ...

  6. LA3644简单并查集判环

    题意:       有n个化合物,每个化合物是两种元素组成,现在要装车,但是一旦车上的化合物中的某几个化合物组成这样一组关系,有n个化合物正好用了n中元素,那么就会爆炸,输入的顺序是装车的顺序,对于每 ...

  7. HDU 4514 - 湫湫系列故事——设计风景线 - [并查集判无向图环][树形DP求树的直径]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  8. HDU 3926 并查集 图同构简单判断 STL

    给出两个图,问你是不是同构的... 直接通过并查集建图,暴力用SET判断下子节点个数就行了. /** @Date : 2017-09-22 16:13:42 * @FileName: HDU 3926 ...

  9. HDU 4496 并查集 逆向思维

    给你n个点m条边,保证已经是个连通图,问每次按顺序去掉给定的一条边,当前的连通块数量. 与其正过来思考当前这边会不会是桥,不如倒过来在n个点即n个连通块下建图,检查其连通性,就能知道个数了 /** @ ...

随机推荐

  1. Spring core resourc层结构体系及JDK与Spring对classpath中资源的获取方式及结果对比

    1. Spring core resourc层结构体系 1.1. Resource相关结构体系 1.2. ResourceLoader相关体系 2. JDK与Spring对classpath中资源的获 ...

  2. IO Streams:扫描

    简介 Scanner类被用于输入的格式化中断,并将其移到Tokens中,然后对其单个的Tokens根据其数据类型进行翻译. 从input--Tokens 默认情况下,一个Scanner使用 空格 键去 ...

  3. Jeddict:从服务器的验证过程,思考学习新事物的套路

    结合一路研究Jeddict使用的过程经验来看,在这里说一下关于服务器配置的东西.在我们团队,最开始用这个插件的时候,因为公司用的应用服务器是Jboss EAP 7,所以,我们自然而然的,想当然的直接使 ...

  4. iOS-----openGL--openGL ES iOS 入门篇--->搭建openGL环境

    OpenGL版本 iOS系统默认支持OpenGl ES1.0.ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适 ...

  5. iOS--app自定义相册--给图片重写exif数据-定义相册时间戳

    1.Exif简介 可交换图像文件格式常被简称为Exif(Exchangeable image file format),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据. Exif可 ...

  6. UVa——540Team Queue(STL练习map、queue数组的综合使用)

    Team Queue Time Limit:                                                        3000MS                 ...

  7. [LOJ#113]最大异或和

    [LOJ#113]最大异或和 试题描述 这是一道模板题. 给由 n 个数组成的一个可重集 S,求一个集合 T⊆S,使 T1 xor T2 xor … xor T|T| 最大 输入 第一行一个数 n.第 ...

  8. 如何在Windows上卸载DB2

    怎么在Windows下正确卸载DB2: http://www.360doc.com/content/11/1117/16/7485728_165237689.shtml ↑↑↑ 上面的文章挺复杂,我没 ...

  9. 使用Matlab实现对图片的缩放

    在做图像处理的时候,有时需要对图片的像素进行放大或则缩小. 使用Matlab很容易实现对图像的放大和缩小.这里只讲缩放到固定像素的方法. clear; clc; %清除以前的数据 folderName ...

  10. foj Problem 2275 Game

    Problem D Game Accept: 145    Submit: 844Time Limit: 1000 mSec    Memory Limit : 262144 KB Problem D ...