poj 1895(最长链)
Posted 发牌员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 1895(最长链)相关的知识,希望对你有一定的参考价值。
在树内任找一点,找到离他最远的点,这个点必是树径的一个端点
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> using namespace std; const int maxn=100000+100; const int inf=0x3f3f3f3f; int n,k,m; int vis[maxn],d[maxn]; struct note { int next; int to; int len; } aa[maxn]; int hade[maxn]; void addage(int fr,int to,int len) { aa[k].len=len; aa[k].to=to; aa[k].next=hade[fr]; hade[fr]=k++; } void bfs(int x) { memset(vis,0,sizeof(vis)); memset(d,inf,sizeof(d)); d[x]=0; vis[x]=1; queue<int> q; q.push(x); while(q.size()) { int u=q.front(); q.pop(); for(int i=hade[u]; i!=-1; i=aa[i].next) { int v=aa[i].to; if(!vis[v]&&d[u]+aa[i].len<d[v]) { d[v]=d[u]+aa[i].len; vis[v]=1; q.push(v); } } } } int main() { while(~scanf("%d%d",&n,&m)) { k=0; memset(hade,-1,sizeof(hade)); int fr,to,len; for(int i=1; i<=m; i++) { scanf("%d%d%d",&fr,&to,&len); getchar(); getchar(); addage(fr,to,len); addage(to,fr,len); } bfs(1); int maxi=-1,kk=0; for(int i=1; i<=n; i++) { if(maxi<d[i]) { kk=i; maxi=d[i]; } } bfs(kk); for(int i=1; i<=n; i++) if(maxi<d[i]) { maxi=d[i]; } printf("%d\n",maxi); } return 0; }
以上是关于poj 1895(最长链)的主要内容,如果未能解决你的问题,请参考以下文章
题解报告:poj 2631 Roads in the North(最长链)
POJ 1458 - Common Subsequence(最长公共子串)