sicily 1024. Magic Island(week 11)
来源:互联网 发布:帝国cms仿bt天堂源码 编辑:程序博客网 时间:2024/06/05 02:16
题目链接: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; }
0 0
- sicily 1024. Magic Island(week 11)
- Sicily 1024. Magic Island
- Sicily 1024. Magic Island
- sicily 1024. Magic Island
- sicily 1024.Magic island
- Sicily 1024. Magic Island
- Sicily 1024. Magic Island
- sicily 1024. Magic Island
- Sicily 1024. Magic Island
- [sicily online]1024. Magic Island
- Sicily 1024 Magic Island
- Sicily 1024 Magic Island
- sicily 1024 Magic Island
- Sicily 1024. Magic Island (DFS 深度优先搜索)
- 1024. Magic Island
- 1024. Magic Island
- Sicily 1024 Magic Island(DFS深度优先搜索)
- [Sicily 1024 Magic Island] 邻接表/简单深度优先搜索
- 2017 CCPC 女生专场(重现)
- 欢迎使用CSDN-markdown编辑器
- 大数据到底是什么
- loadrunner设置关联
- 嵌入式驱动开发之内核源码树(内核升级)的引用
- sicily 1024. Magic Island(week 11)
- 迁移学习
- Java变量的默认初始化
- 算法导论 练习题 12.3-3
- Android项目JNI开发
- Android程序问题(1)
- C++二叉树的建立与遍历
- SparkMLlib之01-Spark机器学习库介绍
- Catalan数