HDU4514湫湫系列故事——設計風景線(並查集判環+最長直徑)
題目連結:傳送門
題意:
先判一個圖是否存在換,不存在的話輸出這個圖的最長路徑。
程式碼如下:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;
const int maxn = 1e6+10;
int par[maxn/10],head[maxn/10];
bool vis[maxn/10];
int dis[maxn/10];
bool used[maxn/10];
struct nod {
int to,next,w;
} edge[maxn*2];
int n,m,ip;
void init() {
ip=0;
memset(head,-1,sizeof(head));
memset(used,0,sizeof(used));
for(int i=1; i<maxn/10; i++)
par[i]=i;
}
int find_par(int x) {
if(par[x]!=x) return par[x] = find_par(par[x]);
return par[x];
}
bool Union(int x,int y) {
x=par[x];
y=par[y];
if(x!=y) {
par[y]=x;
return true;
}
return false;
}
void add(int u,int v,int w) {
edge[ip].to=v;
edge[ip].w=w;
edge[ip].next=head[u];
head[u]=ip++;
}
int max_size;
int BFS(int u) {
max_size=0;
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
queue<int >Q;
Q.push(u);
vis[u]=1;
int to =u;
while(!Q.empty()) {
int top = Q.front();
used[top]=1;
Q.pop();
for(int i=head[top]; i!=-1; i=edge[i].next) {
int v = edge[i].to;
if(!vis[v]) {
dis[v]=edge[i].w+dis[top];
if(dis[v]>max_size)
max_size=dis[v],to=v;
vis[v]=1;
Q.push(v);
}
}
}
return to;
}
int main() {
while(~scanf("%d%d",&n,&m)) {
init();
bool tag = 0;
for(int i=0; i<m; i++) {
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
if(tag) continue;
if(!Union(u,v)) tag = 1;
add(u,v,w);
add(v,u,w);
}
if(tag) {
puts("YES");
continue;
}
int ans = -1;
for(int i=1; i<=n; i++) {
if(!used[i]) {
int st = BFS(i);
BFS(st);
ans = max(ans,max_size);
}
}
printf("%d\n",ans);
}
return 0;
}
/****
5 4
1 2 1
2 3 2
2 4 1
4 5 2
***/
相關文章
- Codeforces 455C Civilization:樹的直徑 + 並查集【合併樹後直徑最小】並查集
- 並查集系列之「路徑壓縮( path compression ) 」並查集路徑壓縮
- Codeforces Round #360 (Div. 1) D 並查集判奇環並查集
- 並查集經典應用場景並查集
- 並查集系列之「思路優化」並查集優化
- 並查集系列之「思路最佳化」並查集
- 並查集到帶權並查集並查集
- 【並查集】【帶偏移的並查集】食物鏈並查集
- HDU-3635 Dragon Balls 並查集路徑壓縮Go並查集路徑壓縮
- 序列並查集的線性演算法並查集演算法
- 並查集系列之「基於size的優化」並查集優化
- 並查集系列之「基於rank的優化」並查集優化
- 程式設計沒有捷徑:奇葩冒牌程式設計師的故事程式設計師
- 並查集(一)並查集的幾種實現並查集
- FCPX外掛:直線圖形矩形線條路徑動畫預設動畫
- 3.1並查集並查集
- 並查集(小白)並查集
- HDU 5200 Tree (離線並查集)並查集
- 並查集系列之「基於size的最佳化」並查集
- 並查集系列之「基於rank的最佳化」並查集
- 並查集(Union Find)並查集
- 並查集應用並查集
- The Door Problem 並查集並查集
- 並查集練習並查集
- 並查集的使用並查集
- 並查集—應用並查集
- 寫模板, 並查集。並查集
- 並查集跳躍並查集
- 各種並查集並查集
- 食物鏈(並查集)並查集
- BZOJ 3673 可持久化並查集 by zky 可持續化線段樹+並查集啟發式合併持久化並查集
- 【架構師視角系列】風控場景下配置中心的設計實戰架構
- Java程式設計師成長路徑Java程式設計師
- bzoj3444: 最後的晚餐(並查集+組合數學)並查集
- 687. 最長同值路徑
- 並查集(二)並查集的演算法應用案例上並查集演算法
- 設計欣賞:自然風景大圖背景的網頁設計網頁
- 上海登陸最強颱風 & 颱風路徑追蹤 All In One