首页 > 其他分享 >[JSOI2013]旅行时的困惑

[JSOI2013]旅行时的困惑

时间:2022-12-14 21:01:01浏览次数:45  
标签:旅行 半链 困惑 int len edge JSOI2013 ans 1000001

链接:https://www.luogu.com.cn/problem/P5258 题目描述:给定一颗有向树,求至少多少条有向路径可以覆盖整颗树(有向路径可以相交) 题解:路径的覆盖,我们容易想到赛道修建那样的半链树型$dp$。但这题边有两种方向,于是我们令$f_{x}$表示以$x$为端点向下半链,$g_{x}$表示以$x$为端点向上半链。 我们可以发现,每一次至多消除两条半链:一条向上,一条向下,至少消除一条半链。所以对于每一个节点$x$,我们直接消除上半链与下半链的匹配肯定不会使答案更差。 这样消除完后还剩下一些相同方向的半链,由于路径可以相交,我们可以把它们全都上传到父亲节点。因为在$x$节点消每一次只能消一条半链,说不定在父亲节点还能消除两条半链,所以我们可以将所有的半链上传到父亲节点。 注意:根节点不能上传半链。 ``` #include #include using namespace std; struct node { int v,nxt,data; }; node edge[1000001]; int u,n,ans,len,head[1000001],fa[1000001],f[1000001],g[1000001]; bool used[1000001]; int visfa[1000001]; void add(int x,int y,int z) { edge[++len].v=y; edge[len].data=z; edge[len].nxt=head[x]; head[x]=len; return; } void dfs(int x) { used[x]=1; for (int i=head[x];i>0;i=edge[i].nxt) if (!used[edge[i].v]) { fa[edge[i].v]=x; visfa[edge[i].v]=edge[i].data; dfs(edge[i].v); } u=min(f[x],g[x]); f[x]-=u; g[x]-=u; ans+=u; if (x==1) { ans+=f[x]+g[x]; return; } if (visfa[x]==0) { f[fa[x]]+=max(f[x],1); ans+=g[x]; } else { g[fa[x]]+=max(g[x],1); ans+=f[x]; } return; } int main() { int x,y; cin>>n; for (int i=1;i<=n-1;++i) { cin>>x>>y; x++; y++; add(x,y,1); add(y,x,0); } dfs(1); cout<

标签:旅行,半链,困惑,int,len,edge,JSOI2013,ans,1000001
From: https://www.cnblogs.com/zhouhuanyi/p/16983523.html

相关文章

  • [JSOI2010]旅行
    链接:https://www.luogu.com.cn/problem/P6029题目描述:给定一个$n$个$m$条边的无向图,可以交换$k$组边,求$1$到$n$的最短路。题解:发现值域都比较小,考虑$dp$。我们可以......
  • [JSOI2013]游戏中的学问
    链接:https://www.luogu.com.cn/problem/P5259题目描述:班里一共有$N$个同学,由$1$到$N$编号。究竟有多少种本质不同的拉手方案,使得最终大家散开后恰好形成$k$个圈呢?题解:......
  • python奇妙旅行之4行代码生成图像验证码
    在学习的路上,永无止境。就好比人掉进"深渊",永远无法自拔!  ~ ~!我没有开车,我没有开车~~~今天空闲时间再看某大佬得论坛,被点了一下,就想起来了2种方法,生成图片验证码,简约......
  • 2022 最新海南岛旅行攻略 All In One
    2022最新海南岛旅行攻略AllInOne海南岛面积约3.54万平方公里,人口约940多万。人口GDPhttps://www.hainan.gov.cn/hainan/zfsj/xsj.shtmlhttps://www.hainan.......
  • 1088. 旅行问题
    题目链接1088.旅行问题John打算驾驶一辆汽车周游一个环形公路。公路上总共有\(n\)个车站,每站都有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米。John......
  • 旅行二
      ★实验任务王尼玛又想出去旅游了,由于王尼玛是个抠门的人,所以王尼玛想要花最少的钱去一个自己想去的地方。王尼玛决定使用火车去旅行,地图上总共有n个城市,其中有k个......
  • java最容易理解的旅行售货员问题
    packageNqueen;publicclasszuiduanluxian{/***旅行售货员问题--回溯法*@authorLican**/publicstaticclassBttsp{//建立一个javabean类而且是......
  • P8855 [POI2002]商务旅行
    简要题意给出一个\(N\)个节点的树和一个长度为\(M\)的序列\(S\)。你需要从\(1\)出发,依次经过\(S\)中的所有点,求至少需要经过的边数。\(1\leN\le30000\)思......
  • 【路径规划】基于遗传算法求解固定的开放式多旅行推销员问题(M-TSP)附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进。......
  • MFC-QT校园导航系统(旅行商TSP算法)
    MFC-QT校园导航系统(旅行商TSP算法)[问题描述]旅行商问题,给定若干城市和城市间距离,求解访问每一座城市一次并回到起始城市的最短回路。想象一个校园场景:某同学从宿舍出发......