国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

1021.Deepest Root (25)

2019-11-14 10:13:59
字體:
來源:轉載
供稿:網友

1021.Deepest Root (25)

pat-al-1021

2017-02-04

考點:深搜dfs關于連通分量的計算:從任一點出發開始深搜,結束一次搜索后如果還有點沒被訪問到(即,可以進行多次搜索)說明連通分量不止一個,能進行幾次搜索就有幾個連通分量關于題目要求的找最長的路徑的起始點,參考了:1021. Deepest Root (25)-PAT甲級真題。個人理解:第一次出發開始搜索(不管起始點是哪個節點)所找到的「當前」最長路徑的終點(們),一定是「整個圖」最長路徑的的起始點,所以再以此為起始點去深搜,找到的「當前」最長路徑的終點,也一定是要找的「整個圖」最長路徑的起始點(因為這是無向圖嘛,起點亦是終點,終點亦是起點)。把這些點保存下來,就是要求的節點。還不能理解就自己在草稿紙上畫一畫。不能用數組來存儲邊了,會內存超限,要改用vector關于vector作為二維數組使用:要么聲明時就聲明為vector< vector< int> > e,搭配e.resize(n)來使用;要么聲明時就給定大小vector< int> e[101],也可作為二維數組用。如果聲明時是一維的,又沒給定大小,就不能作為二維數組用。使用set是因為set能按從小到大的順序去保存放進去的數,不用自己排序了練習了一下迭代器iterator的使用/** * pat-al-1021 * 2017-02-03 * Cpp version * Author: fengLian_s */#include<stdio.h>#include<string>#include<vector>#include<set>#define MAX 10001#define INF 0x3f3f3f3fusing namespace std;int n, visited[MAX];vector<vector<int> > e;int maxDepth = -1;vector<int> v;set<int> s;void dfs(int id, int depth){ visited[id] = 1; if(depth > maxDepth) { maxDepth = depth; v.clear(); v.push_back(id); } else if(depth == maxDepth) { v.push_back(id); } for(int i = 0;i < e[id].size();i++) { if(visited[e[id][i]] == 0) dfs(e[id][i], depth+1); }}int main(){ freopen("in.txt", "r", stdin); scanf("%d", &n); e.resize(n+1); for(int i = 1;i < n;i++) { int node1, node2; scanf("%d%d", &node1, &node2); e[node1].push_back(node2); e[node2].push_back(node1); } int cnt = 0, s1; fill(visited, visited+MAX, 0); for(int i = 1;i <= n;i++) { if(visited[i] == 0) { dfs(i, 0); //-FIN-


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金塔县| 蓬安县| 永定县| 大港区| 康保县| 黑龙江省| 余姚市| 巨野县| 四平市| 万载县| 宿迁市| 昌黎县| 镶黄旗| 囊谦县| 和田市| 天台县| 突泉县| 兴和县| 钦州市| 万载县| 大港区| 双流县| 镇原县| 息烽县| 英超| 清原| 安康市| 翁牛特旗| 凤庆县| 平阳县| 九龙坡区| 武义县| 滨州市| 汽车| 荥经县| 巴南区| 隆安县| 张北县| 浏阳市| 晋州市| 江山市|