1053 path of equal weight


My code:
# include <cstdio>
# include <cstring>
# include <queue>
# include <vector>
# include <algorithm>
using namespace std;
struct node{
    int seq,ww;
}c_id[110];
vector<int> v[110];
int l,s,ans,sum,dd[110],dis[110],end_w[110][110];
void dfs(int x)
{
    sum += dd[x];
    dis[ans++] = dd[x];
    int i;
    if(sum >= s)
    {
        if(sum == s && v[x].size() == 0)
        {
            for(i = 0;i < ans;i++)
                end_w[l][i] = dis[i];
            l++;
        }
    }
    else
    {
        for(i = 0;i < v[x].size();i++)
        {
            int kk = v[x][i];
            dfs(kk);
        }
    }
    sum -= dd[x];
    dis[--ans] = 0;
}
void out()
{
    int i,j = 0;
    while(l--)
    {
        for(i = 0;end_w[j][i] != 0;i++)
            printf(i == 0 ? "%d" : " %d",end_w[j][i]);
        printf("\n");
        j++;
    }
}
bool cmp(node a,node b)
{
    return a.ww > b.ww;
}
int main()
{
    int n,m;
    while(scanf("%d%d%d",&n,&m,&s)==3)
    {
        int i,j;
        for(i = 0;i < n;i++)
        {
            scanf("%d",&dd[i]);
            v[i].clear();
            dis[i] = 0;
            for(j = 0;j < n;j++)
                end_w[i][j] = 0;
        }
        for(i = 0;i < m;i++)
        {
            int j,id,num,ss;
            scanf("%d%d",&id,&num);
            for(j = 0;j < num;j++)
            {
                scanf("%d",&ss);
                c_id[j].seq = ss;
                c_id[j].ww = dd[ss];
            }
            sort(c_id,c_id+num,cmp);
            for(j = 0;j < num;j++)
                v[id].push_back(c_id[j].seq);
        }
        l = ans = sum = 0;
        dfs(0);
        out();
    }
    return 0;
}

双击代码区域可以查看未格式化的原始代码


查看提交
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值