求救,存图没区别的吧
查看原帖
求救,存图没区别的吧
590635
2021we楼主2022/7/15 19:16

大体一模一样,只是换个存图的方法,链式前向星是55,连接表是100,为啥阿?

(题解第四个的)

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int N=110;
int n,m;
int f[N][N];
int head[N],to[N],nxt[N],tot,val[N];
int v[N];
// vector<int> vec[N];
// int val[N][N];
void add(int x,int y,int z){
    to[++tot]=y;
    nxt[tot]=head[x];
    head[x]=tot;
    val[tot]=z;
}

void dfs(int x){
    v[x]=1;
    for(int i=head[x];i!=0;i=nxt[i])
    // for(int i=0;i<vec[x].size();i++)
    {
        // int y=vec[x][i],w=val[x][y];
        int y=to[i];int w=val[i];
        if(v[y]) continue;
        v[y]=1;
        dfs(y);
        for(int j=m;j>=1;j--){
            for(int k=j-1;k>=0;k--){
                f[x][j]=max(f[x][j],w+f[y][k]+f[x][j-k-1]);
            }
        }
    }
}

int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<n;i++){
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);
        add(y,x,z);
        // vec[x].push_back(y);
        // vec[y].push_back(x);
        // val[x][y]=z;
        // val[y][x]=z;
    }
    dfs(1);
    printf("%d",f[1][m]);
    return 0;
}
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int N=110;
int n,m;
int f[N][N];
// int head[N],to[N],nxt[N],tot,val[N];
int v[N];
vector<int> vec[N];
int val[N][N];
// void add(int x,int y,int z){
//     to[++tot]=y;
//     nxt[tot]=head[x];
//     head[x]=tot;
//     val[tot]=z;
// }

void dfs(int x){
    v[x]=1;
    // for(int i=head[x];~i;i=nxt[i])
    for(int i=0;i<vec[x].size();i++){
        int y=vec[x][i],w=val[x][y];
        // int y=to[i];int w=val[i];
        if(v[y]) continue;
        v[y]=1;
        dfs(y);
        for(int j=m;j>=1;j--){
            for(int k=j-1;k>=0;k--){
                f[x][j]=max(f[x][j],w+f[y][k]+f[x][j-k-1]);
            }
        }
    }
}

int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<n;i++){
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        // add(x,y,z);add(y,x,z);
        vec[x].push_back(y);
        vec[y].push_back(x);
        val[x][y]=z;
        val[y][x]=z;
    }
    dfs(1);
    printf("%d",f[1][m]);
    return 0;
}
2022/7/15 19:16
加载中...