TOJ 3517 The longest athletic track

3517.   The longest athletic track


Time Limit: 1.0 Seconds   Memory Limit: 65536K
Total Runs: 880   Accepted Runs: 342


After a long time of algorithm training, we want to hold a running contest in our beautiful campus. Because all of us are curious about a coders‘s fierce athletic contest,so we would like a more longer athletic track so that our contest can last more .

In this problem, you can think our campus consists of some vertexes connected by roads which are undirected and make no circles, all pairs of the vertexes in our campus are connected by roads directly or indirectly, so it seems like a tree, ha ha.

We need you write a program to find out the longest athletic track in our campus. our athletic track may consist of several roads but it can‘t use one road more than once.

Input

*Line 1: A single integer: T represent the case number T <= 10
For each case
*Line1: N the number of vertexes in our campus 10 <= N <= 2000
*Line2~N three integers a, b, c represent there is a road between vertex a and vertex b with c meters long
1<= a,b <= N,  1<= c <= 1000;

Output

For each case only one integer represent the longest athletic track‘s length

Sample Input

1
7
1 2 20
2 3 10
2 4 20
4 5 10
5 6 10
4 7 40

Sample Output

80

Source: TJU Team Selection Contest 2010 (3)

解题:求树的直径。。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 #include <climits>
 7 #include <vector>
 8 #include <queue>
 9 #include <cstdlib>
10 #include <string>
11 #include <set>
12 #include <stack>
13 #define LL long long
14 #define pii pair<int,int>
15 #define INF 0x3f3f3f3f
16 using namespace std;
17 const int maxn = 2010;
18 struct arc{
19     int to,w,next;
20     arc(int x = 0,int y = 0,int z = -1){
21         to = x;
22         w = y;
23         next = z;
24     }
25 };
26 arc e[maxn*20];
27 int head[maxn],d[maxn],tu,tot,n;
28 void add(int u,int v,int w){
29     e[tot] = arc(v,w,head[u]);
30     head[u] = tot++;
31     e[tot] = arc(u,w,head[v]);
32     head[v] = tot++;
33 }
34 int bfs(int u){
35     queue<int>q;
36     memset(d,-1,sizeof(d));
37     q.push(u);
38     d[u] = 0;
39     int maxlen = 0;
40     while(!q.empty()){
41         u = q.front();
42         q.pop();
43         if(d[u] > maxlen) maxlen = d[tu = u];
44         for(int i = head[u]; ~i; i = e[i].next){
45             if(d[e[i].to] > -1) continue;
46             d[e[i].to] = d[u] + e[i].w;
47             q.push(e[i].to);
48         }
49     }
50     return maxlen;
51 }
52 int main() {
53     int T,u,v,w;
54     scanf("%d",&T);
55     while(T--){
56         scanf("%d",&n);
57         memset(head,-1,sizeof(head));
58         for(int i = tot = 0; i+1 < n; ++i){
59             scanf("%d %d %d",&u,&v,&w);
60             add(u,v,w);
61         }
62         bfs(1);
63         printf("%d\n",bfs(tu));
64     }
65     return 0;
66 }

时间: 2024-11-06 09:34:24

TOJ 3517 The longest athletic track的相关文章

Tju_Oj_3517The longest athletic track

这个题主要考察对树的操作,主要思想是DFS或者BFS,其次是找树的直径方法(既要运用两次BFS/DFS),最后作为小白,还练习了vector的操作. DFS框架伪码: bool DSF(Node oneTreePoint ){ //传入的结点和其他有效信息 visited[nowPoint] = 1; //当前点已遍历标记 相关操作(随题更改)for( AllLinkNode){//遍历与此点相连的所有节点: if ( !visited[oneLinkNode] ){ //如果没有被访问过才能继

LeetCode 300. Longest Increasing Subsequence

300. Longest Increasing Subsequence Description Submission Solutions Add to List Total Accepted: 64115 Total Submissions: 170859 Difficulty: Medium Contributors: Admin Given an unsorted array of integers, find the length of longest increasing subsequ

LeetCode 之 Longest Valid Parentheses(栈)

[问题描写叙述] Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is "()", which has length = 2. Another exa

Leetcode 128. Longest Consecutive Sequence (union find)

Given an unsorted array of integers, find the length of the longest consecutive elements sequence. Your algorithm should run in O(n) complexity. Example: Input: [100, 4, 200, 1, 3, 2] Output: 4 Explanation: The longest consecutive elements sequence i

[Swift]LeetCode409. 最长回文串 | Longest Palindrome

Given a string which consists of lowercase or uppercase letters, find the length of the longest palindromes that can be built with those letters. This is case sensitive, for example "Aa" is not considered a palindrome here. Note:Assume the lengt

LeetCode OJ - Longest Consecutive Sequence

这道题中要求时间复杂度为O(n),首先我们可以知道的是,如果先对数组排序再计算其最长连续序列的时间复杂度是O(nlogn),所以不能用排序的方法.我一开始想是不是应该用动态规划来解,发现其并不符合动态规划的特征.最后采用类似于LRU_Cache中出现的数据结构(集快速查询和顺序遍历两大优点于一身)来解决问题.具体来说其数据结构是HashMap<Integer,LNode>,key是数组中的元素,所有连续的元素可以通过LNode的next指针相连起来. 总体思路是,顺序遍历输入的数组元素,对每个

POJ 2533 - Longest Ordered Subsequence(最长上升子序列) 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:http://poj.org/problem?id=2533 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numeric sequence (a1, a2, ..., aN) be any sequence (ai1, ai2, ..., aiK)

Longest Common Subsequence

Problem statement: Given two strings, find the longest common subsequence (LCS). Your code should return the length of LCS. Have you met this question in a real interview? Yes Clarification What's the definition of Longest Common Subsequence? https:/

14. Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings. 这个问题是关于如何寻找字符串数组的公共前缀的,从第一个字母开始,只要共有的都要输出. 思路: 1.首先,如何得到字符串共有前缀,既然共有,那么很容易先想到最短字符串. 2.最短字符串和其余进行比较,这样就省下了大于最短字符串长度的比较. 3.关于字符串的操作,length和null是很必要的判断输入操作,千万别忘记! 4.关