sicily 1024. Magic Island(week 11)

xiaoxiao2021-02-28  59

题目链接:http://soj.sysu.edu.cn/1024 这里要注意到,有n个点,但是只有n-1条路径,说明是树,用dfs求树的最长路径: (用c++输入0.35s,用c输入0.18s)

#include <iostream> #include <vector> #include <string.h> #include <cstring> #include <stdio.h> using namespace std; struct Road { int to, distance;//目的地和距离 Road(int new_to, int new_distance) {//这样写为了读入方便 to = new_to; distance = new_distance; } }; vector<Road> roads[10001];//注意这里是二维动态数组 bool vis[10001]; int longest_road, n; void dfs(int from, int dis) { if (dis > longest_road)//更新最长的路径 longest_road = dis; vis[from] = true;//这个点已经访问过,不重复访问 for (int i = 0; i < (int)roads[from].size(); i++) {//遍历from所能连通的点并判断是否dfs if (!vis[roads[from][i].to]) { dfs(roads[from][i].to, dis + roads[from][i].distance); } } } int main() { int k, i, temp_from, temp_to, new_distance; while (cin >> n >> k) { longest_road = 0; memset(vis, false, sizeof(vis)); memset(roads, 0, sizeof(roads)); for (i = 0; i < n - 1; i++) { scanf("%d%d%d", &temp_from, &temp_to, &new_distance); roads[temp_from].push_back(Road(temp_to, new_distance));//注意这里两点是互通的 roads[temp_to].push_back(Road(temp_from, new_distance)); } dfs(k, 0); printf("%d\n", longest_road); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-84275.html

最新回复(0)