1053. Path of Equal Weight (30)

从叶子节点开始找比较方便。另外输出内容排序可以把输出串放在string中排序再输出比较方便

#define  _CRT_SECURE_NO_WARNINGS 

#include<string>
#include<string.h>
#include<vector>
#include<map>
#include<stack>
#include<iostream>
#include<sstream>
#include<algorithm>
#include<stdio.h> 
using namespace std; 
bool cmp(string a, string b)
{
return a > b;
}
struct Route
{
vector<int> r;
int wei;
};
struct Node
{
int parent;
vector<Route> route;
bool leaf;
Node()
{
parent = -1;
leaf = true;
}


};
int mm[100000] = {0};
int main()

int N, M, S;
cin >> N >> M >> S;
int *weight = new int[N];
for (int i = 0; i < N; i++)
scanf("%d",&weight[i]);
Node *node = new Node[N];
for (int i = 0; i < M; i++)
{
int key, size;
scanf("%d %d", &key, &size);
node[key].leaf = false;
for (int j = 0; j < size; j++)
{
int tmp;
scanf("%d", &tmp);
//node[key].child.push_back(tmp);
node[tmp].parent = key;

}
for (int i = 0; i < N; i++)
{
if (node[i].leaf)
{
Route r;
r.r.push_back(i);
r.wei = weight[i]; 


int par = node[i].parent;
if (par==-1)
node[i].route.push_back(r);
while (par != -1)
{
r.r.push_back(par);
r.wei += weight[par];
if (node[par].parent==-1)
node[par].route.push_back(r);
par = node[par].parent;
}
}
}
vector<string> out;
for (int j = 0; j < node[0].route.size(); j++)
{
if (node[0].route[j].wei == S)
{
string sTmp;
vector<int> vR = node[0].route[j].r;
for (int k = vR.size() - 1; k >= 0; k--)
{
char c_s[4];
sprintf(c_s, "%03d", weight[vR[k]]);
sTmp += c_s;
}
out.push_back(sTmp);
}
}
sort(out.begin(), out .end(),cmp);
for (int i = 0; i < out.size(); i++)
{
string sT = out[i];
printf("%d", atoi(sT.substr(0, 3).c_str()));
for (int j = 3; j < sT.size(); j += 3)
{
int i = atoi(sT.substr(j,3).c_str());
printf(" %d",i);
}
cout << endl;
}
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值