牛客小白月赛11 F Rinne Loves Edges

题目链接:

传送门

代码如下:

#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
int n,m,s;
int head[maxn];
ll f[maxn];
ll ans=0;
struct edge
{
  int next;
  int to;
  int len;
};
edge e[2*maxn];
void create (int id,int u,int v,int len)
{
    e[id].to=v;
    e[id].len=len;
    e[id].next=head[u];
    head[u]=id;
}
void dfs (int x,int start)
{
    int flag=0;
   for (int i=head[x];i!=-1;i=e[i].next)
   {
       int u=e[i].to,len=e[i].len;
       if(u==start) continue;
       flag=1;
       dfs(u,x);
       f[x]+=min(f[u],1ll*len);
   }
   if(flag==0) f[x]=0x3f3f3f3f;
}
int main()
{
    memset (f,0,sizeof(f));
    memset (head,-1,sizeof(head));
    scanf("%d%d%d",&n,&m,&s);
    for (int i=1,id=0;i<=m;i++)
    {
        ll x,y,len;
        scanf("%d%d%d",&x,&y,&len);
        create (++id,x,y,len);
        create (++id,y,x,len);
    }
    dfs(s,-1);
    printf("%lld\n",f[s]);
    return 0;
}

 

你可能感兴趣的:(牛客网,动态规划,树)