題意:(略) 注意求的長度是指樹中最長的鏈,即樹的直徑
注意這裡可能是不連通圖
先 dfs 判斷圖中是否有環,然後求樹的直徑,做法是 以任意一點u,為根節點,dfs找到最遠的點 start,再以該節點為根節點 dfs,找到的最遠的點,它們的距離就是解。
code:
#include #include #include #include #include #include #include #include #include #include #include #include #include #define ll long long
#define inf 0x3f3f3f3f
#define eps 1e-9
#define pa system("pause")
#define pi acos(-1.0)
using namespace std;
#define m 100005
int vis[m],head[m],dis[m];
struct edge
e[2000005];
int ecnt, n, st;
void addedge(int u, int v, int w)
void dfs1(int u) //從u 出發找最遠的點
}}int dfs(int u,int fa) // dfs判斷有沒有環
}return 0;
}bool check()
}return 0;
}int getdia(int u) //找樹的直徑
}for(i = 1; i <= n; i++)
dis[i] = (i==st? 0:inf);
memset(vis, 0, sizeof(vis));
dfs1(st);
len = -1;
for(i = 1; i <= n; i++)
return len;
}int main()
memset(vis,0,sizeof(vis));
if(check())
puts("yes");
else
}printf("%d\n",ans);}}
return 0;
}
hdu 4514 並查集判環)
tencent昨天比賽的題目,昨天看的時候沒什麼思路,今天在網上搜了一下,說是可以用並查集做。果然,過了。看來還是做的題不夠多啊!思路 並查集判環,並把每次的邊權值都加到根結點的上去,最後求每個根結點權值的最大值就行了。orz 1 include2 include3 const int n 1000...
hdu1016 DFS 素數判斷
總是不好好審題。總結一下自己不看題容易犯的錯 1.漏掉某個重要條件。如此題的必須為1開頭,之前還有一道迷宮題也是。2.列印格式問題 3.可能是多個樣例輸入 在這點上栽了很多次了。4.不同答案的英文格式問題。此題是最簡單的dfs 素數判斷,素數直接照搬之前學習的乙個單個素數判斷方法,非常強悍 hdu1...
hdu1016 素數環剪枝dfs
題意 n 20範圍,搜乙個全排列,滿足素數環,相鄰兩個數字和為素數,最後一位和第一位之和也是素數。剪枝 每一位都先先判斷再搜尋。include include include include include include include include include include includ...