Tree2cycle最小代价使一棵树构成环

来源:互联网 发布:apachemysql数据库管理 编辑:程序博客网 时间:2024/06/06 08:54
一棵树,删边加边代价都是1,求使它变成环的最小代价
#include <stdio.h>#include <stdlib.h>#include <iostream>#include <vector>#include <cstring>using namespace std;#define INF 1000005vector<int> ve[INF];int n,m,ans;bool vis[INF];int dfs(int u){    int i,j,v,sum=0;    for(i=0;i<ve[u].size();i++)    {        v=ve[u][i];        if(!vis[v])        {            vis[v]=true;            sum+=dfs(v);        }    }    if(sum>=2)    {        if(u==1)ans=ans+2*(sum-2);//2*(sum-2)+1+1        else ans=ans+2*(sum-1);//根        return 0;    }    return 1;}int main(){    int t,i,u,v;    scanf("%d",&t);    while(t--)    {        for(i=0;i<INF;i++)            ve[i].clear();        scanf("%d",&n);        for(i=1;i<n;i++)        {            scanf("%d%d",&u,&v);            ve[u].push_back(v);            ve[v].push_back(u);        }        ans=0;        memset(vis,false,sizeof(vis));        vis[1]=true;        dfs(1);        printf("%d\n",ans+1);    }    return 0;}
0 0