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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

1053. Path of Equal Weight (30)

2019-11-11 02:11:32
字體:
供稿:網(wǎng)友

1. 原題: https://www.patest.cn/contests/pat-a-PRactise/1053

2. 思路:

題意:遍歷出從根到葉子路徑的總權(quán)值與給定的相等的序列。思路:核心是dfs了。然后一個問題是序列從大到小輸出?怎么做呢。假設(shè)我們每次都從最大的孩子遞歸遍歷,那么結(jié)果正是我們要的。所以,我們對每個父結(jié)點的孩子降序排序后,再dfs就好了。已AC

3. 源碼(已AC):

#include<iostream>#include<algorithm>//使用sort函數(shù)#include<vector>using namespace std;vector<int> pwt;//存儲路徑的每個結(jié)點權(quán)值vector<int> nwt;//存儲樹的每個結(jié)點權(quán)值int N, M, S;//分別為總結(jié)點數(shù), 非葉子節(jié)點數(shù),給出的權(quán)值struct Node{	bool Operator<(const Node &b) const//重載比較運算符	{		return wgt > b.wgt;	}	int id;//結(jié)點編號	int wgt;//權(quán)值};vector< vector<Node> > vtree;//類似圖的鄰接表表示,嵌套vector,表示結(jié)點的孩子void dfs(int s, int sum);//dfs,參數(shù)為遍歷起點,累計的權(quán)值int main(void){	//freopen("in.txt", "r", stdin);	cin >> N >> M >> S;	nwt.resize(N);//重新定義數(shù)組大小	vtree.resize(N);	for (int i = 0; i < N; i++)//保存每個結(jié)點權(quán)值		cin >> nwt[i];	for (int i = 0; i < M; i++ )	{		int par, num;		cin >> par >> num;		vtree[par].resize(num);		for (int j = 0; j < num; j++)//每個孩子結(jié)點壓入父結(jié)點的數(shù)組中		{			Node tem;			cin >> tem.id;			tem.wgt = nwt[tem.id];			vtree[par][j] = tem;		}		sort(vtree[par].begin(), vtree[par].end());//降序排序	}		dfs(0, 0);	return 0;}void dfs(int s, int sum){	sum += nwt[s];	pwt.push_back(nwt[s]);	if (sum > S)//大于直接返回上一級		return;	if (sum == S && vtree[s].empty())//相等且為葉子結(jié)點,為所求,輸出結(jié)果	{		for (int i = 0; i < pwt.size(); i++)		{			if (i == 0)				cout << pwt[i];			else				cout << ' ' << pwt[i];		}		cout << endl;		return;	}	if (sum < S && vtree[s].size() > 0)//小于的話,繼續(xù)dfs	{		for (int i = 0; i < vtree[s].size(); i++)		{			dfs(vtree[s][i].id, sum);			pwt.pop_back();//從dfs里返回后要彈出最后壓入的		}	}	return;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌苏市| 宜兰市| 肃宁县| 汉寿县| 通海县| 吴江市| 沂源县| 江孜县| 义马市| 阳山县| 邵东县| 化隆| 上高县| 柳江县| 南京市| 象山县| 共和县| 普兰县| 盘山县| 资中县| 崇仁县| 峡江县| 固安县| 铅山县| 沂源县| 武安市| 石门县| 铜梁县| 舞阳县| 潜江市| 莱芜市| 准格尔旗| 车险| 称多县| 鄂托克前旗| 寿光市| 双城市| 中卫市| 宜兰县| 宁城县| 中方县|