2011ACM成都赛区现场赛H题 (非递归dfs) (hdu4118)

详解ACM基础算法—DFS深度优先搜索算法 HIT杨朔 详解深度优先搜索(DFS)及例题 阅读详情

这题我在现场的时候用图论做超时,需要非递归dfs。

我维护了一个a数组记录结点的儿子数。

#include <stdio.h>
#include <cstring>
#include <stack>
using namespace std;
struct gtype {
       int y,d,next;
}g[200010];
int first[100100],tot,a[100100],tt,x,y,d,n;
bool v[100100];
inline int min(int a,int b) {
       if (a<b) return a; else return b;
} 
void add(int x,int y,int d) {
     tot++;
     g[tot].d=d;
     g[tot].y=y;
     g[tot].next=first[x];
     first[x]=tot;
     tot++;
     g[tot].d=d;
     g[tot].y=x;
     g[tot].next=first[y];
     first[y]=tot;
}
void dfs(int p) {
     stack <int> stk;
     int t=first[p];
     
     stk.push(p);
     v[p]=true;
     while (1) {
           if (t==-1) {
                      int y = stk.top();
                      stk.pop();
                      if (stk.empty()) break;
                      a[stk.top()]+=a[y];
           }
           int x = stk.top();
           t = first[x];
           while (t!=-1) {
                 if (!v[g[t].y]) {
                                 v[g[t].y]=true;
                                 stk.push(g[t].y);
                                 break;
                 }
                 t=g[t].next;
           }
     }
}
int main() {
    scanf("%d",&tt);
    for (int cas=1;cas<=tt;cas++) {
        tot=0;
        memset(g,0,sizeof(g));
        memset(first,-1,sizeof(first));
        scanf("%d",&n);
        for (int i=1;i<n;i++) {
            scanf("%d%d%d",&x,&y,&d);
            add(x,y,d);
        }
        for (int i=1;i<=n;i++) a[i]=1;
        memset(v,0,sizeof(v));
        dfs(1);
        __int64 ans=0;
        for (int i=1;i<=2*(n-1);i+=2) {
            x=g[i].y;
            y=g[i+1].y;
            d=min(a[x],a[y]);
            ans+=min(d,n-d)*2*g[i].d;
        }
        printf("Case #%d: %I64d\n",cas,ans);
    }
    return 0;
}


基因家族Motif 分析 MEME 阅读详情

相关推荐

用Navicat轻松管理魔兽世界私服数据库:修改IP、添加装备的实用技巧

本文详细介绍了如何使用Navicat管理魔兽世界私服数据库,包括修改服务器IP、添加自定义装备和调整角色属性等实用技巧。通过专业的SQL操作指南,帮助玩家轻松实现私服的高级定制,提升游戏体验。

fanta的博客 938

hdu 4118 Holiday's Accommodation 思维+树形dp

题目链接题意:给出一棵树(n<=1e5),边具有权值。现在每个城市中有一个人出发去另一座城市,不同人的目的不能相同。问路径和的最大值。解法:如果直接从子结构和问题上着手不好考虑。但是多分析机组数据会发现:对于任意一条边,将n个点划分为n1、n2两部分。为了使路径和尽可能大,那么两部分尽可能进行更多的交换,那么令m=min(n1,n2),这条边会经过2*m次。代码:#include<cstdio> #

便纵有千种风情 480

3dMax效率翻倍!用Octopus章鱼插件打造你的专属快捷菜单(附MaxScript入门指南)

本文详细介绍了如何利用Octopus插件和MaxScript脚本在3dMax中打造高效快捷菜单,显著提升三维建模与动画制作的工作效率。通过饼状菜单系统、自动化宏录制和脚本控制,用户可实现个性化工作流,节省大量操作时间。文章还提供了MaxScript入门指南,帮助开发者快速掌握这一强大工具。

weixin_30920853的博客 152

hdu4118(树形DP)

题意:给一棵树(每个节点是一个城市),每个节点上有一个人。每个人都要到另外一个城市,并且每个城市最后只能有一个人。问全局所有人旅行的最长的长度可以是多少。 解法:一定可以构造一种这样的情形:对于每条边,使得少的一边的所有人都到另一边去。这样就实现了每条边的最大化利用。一定是最优解。 代码: /**********************************************

xiefubao的专栏 1338

诠视MR眼镜Unity开发设置_Unity2020.3.38

请按照如下设置Android SDK 和 Gradle。打包前先将Unity切换到Android模式。Preferences 设置。

m0_71932574的博客 602

【电驱动】永磁同步电机工作原理及分类

永磁同步电机工作原理及分类

星Yeah 的博客 7323

HDU - 4118 ——Holiday's Accommodation (树形dp)

题意: 有n个城市,每个城市里有一个人,互相到各自的城市里去旅游,求旅游路线最大总长度。即给n个点,每个点有一个人,有n-1条有权值的边,求所有人不在原来位置所移动的距离的和最大值。 分析:要求最大值,就让 左边的点跑右边去,右边的点跑左面去。所以每条边,都会被走min{left[num], sum-left[nu,]}*2次 代码如下:#include<iostream> #include<

zfldongcidaci的博客 411

yolov26改进 | 检测头篇 | 利用渐近特征金字塔网络AFPN改进yolov26检测头融合P2网络结构(让小目标无所遁形,全网独家首发)

本文介绍一种基于AFPN渐近特征金字塔网络改进的YOLOv26四检测头Detect_FPN。AFPN通过逐级融合底层细节、中层结构与高层语义特征,缩小不同尺度特征之间的语义差距,减少直接融合带来的信息冲突,使检测头获得更稳定、更充分的多尺度表达。本文进一步增加高分辨率小目标检测分支,强化对微小目标、密集目标和复杂背景目标的感知能力,适合工业缺陷、遥感及无人机等场景。文中将展示基础模型与改进模型的训练对比结果,并提供完整代码、配置文件、模块注册方法及Codex修改思路,方便直接复现和二次创新。

Snu77的博客 371

hdu 4118 Holiday's Accommodation 树形dp

Holiday's Accommodation Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4118 Description Nowadays, people have many ways to save money on accommodati...

weixin_33743880的博客 111

Android驱动工程师职位(侧重于Bringup、外设驱动调试、芯片平台经验)

本文摘要:深圳泓京纬科技招聘Android驱动工程师,要求具备Bootloader/LK/Linux Bringup经验,熟悉LPDDR/eMMC/UFS等存储设备调试。文章详细解析了Android系统架构、Linux驱动开发核心概念、设备树作用、串口调试方法等基础知识。重点介绍了存储驱动架构、性能优化和故障排查技巧,包括eMMC识别问题、UFS性能优化、NAND ECC错误处理等实战场景。同时涵盖芯片平台开发经验、跨部门协作调试方法,以及低温环境等特殊场景的问题解决方案。

郑伟强dev的专栏 247

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

jacke121的专栏 2759

HDU 4118 Holiday's Accommodation 贪心(树的重心)

题意:给你n个点和n-1条边,每个边有边权,每个点是一个城市,每个边是一条路,每个城市只有一个人,每个城市的人都要和另外一个城市的人交换家来住,每一个人都要交换,不会有多个人要和同一个人 交换,问交换的时候,两个城市的人都要走相同的距离,当所有的人家都交换完毕的时候,总路程的最大值。 想法:开始看到这道题,最先想到的是暴力求树的直径,但是时间复杂度是O(n^2)超时,n a------

猫ER 728

【ComfyUI专栏】安装Triton组件

Triton是一款支持大模型推理的深度学习加速组件,最初仅支持Linux平台,现已通过开源社区适配Windows系统。针对SageAttention的安装,建议使用3.2.0Post10版本(该版本提供封装好的安装包,更高版本仅有源码)。用户可通过GitHub获取安装资源,或直接使用pip命令"pip install triton-windows"进行安装。安装时需注意:1)在虚拟环境中操作;2)使用管理员权限。相关资源链接已在文中提供。

技术与管理的平衡木- 1861

HDU 4118--Holiday's Accommodation(树形dp)

来源:http://acm.hdu.edu.cn/showproblem.php?pid=4118 题意:给n个点,每个点有一个人,有n-1条有权值的边,求所有人不在原来位置所移动的距离的和最大值。 思路:对于每一个边,都可以把这个变量偷的点交换,这样这些点都要走这个边,就是这个边要走2*min(左端的点数,右端的点数)。但是会爆栈,可以人工开栈,也可用非递归的方法写dfs,同样可以过。 #

Xcockroach的专栏 1699

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

HDU4118:Holiday's Accommodation(思维 & dfs)

Holiday's Accommodation Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 200000/200000 K (Java/Others) Total Submission(s): 3103    Accepted Submission(s): 994 Problem Description N

junior19的博客 387

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

HDOJ1016 非递归DFS

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1016 题目大意:输入一个数字n,输出1到n所有数字组成的序列,每个序列中每个数字出现有且仅有一次。相邻两个数字的和为素数,最后一个数字和第一个数字的和为素数。按照字典序来输出所有可能的结果。所有可能的结果都要以1开头 首先,本题中如果调用STL中的next_permutation方法,随后遍历整个序列...

LOVETEDA的博客 316

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

hdu4118 树形dp

http://acm.hdu.edu.cn/showproblem.php?pid=4118 Problem Description Nowadays, people have many ways to save money on accommodation when they are on vacation. One of these ways is exchanging ho

ACM,再见! 916

DFS的两种非递归的实现方法

第一种方法转自别人的博客: 1.桟初始化 2.输出起始顶点;起始顶点改为“已访问”标志;将起始顶点进桟; 3.重复下列操作直到桟为空: 3.1取桟顶元素顶点;(注意不出桟) 3.2桟顶元素顶点存在未访问过的邻接节点w: 3.2.1输出顶点w 3.2.2将顶点w改为“已访问”标志 3.2.3将顶点w进桟 3.3否则,当前顶点出桟 第二种方法: 1.桟初始化 2.输出起

frist_csdn的博客 1432

HDU 4115 Eliminate the Conflict【2011 ACM Asia Chengdu Regional Problem E】

赛前告诉小朋友们去年区域赛出了两题2-sat,今年不会出了,然后我就错了。而且集训队的2-sat是我讲的,结果导致他们三个队都没过,何等罪过啊 T_T 题目意思很简单,两个人石头剪刀布,一个人的出法是确定的,另一个人的出法有一定约束,某两次要相同或者不同,问你第二个人能否全部都不失败。题目还是很容易想到2-sat的,不过按照官方题解里说的每次出拳拆分成两个相对点的建图方法相当麻烦,小明哥...

weixin_30307267的博客 131

树形DP(Holiday's Accommodation HDU4118)

题意:有n间房子,之间有n-1条道路连接,每个房间里住着一个人,这n个人都想到其他房间居住,并且每个房间不能有两个人,问所有人的路径之和最大是多少? 分析:对于每条边来说,经过改边的人由该边两端元素个数较小者决定 #pragma comment(linker, "/STACK:1024000000,1024000000") #include"stdio.h" #include"stri...

weixin_30776863的博客 131

HDU 4118 Holiday's Accommodation

树形dp,好不容易中秋节做一场比赛,在hust上C上这道题怎么交怎么爆栈。。。无语了,上hdu一交就过了!!! 题目让求的是最远距离的和,两点间距离是最短路。画一下图,然后我们可以发现,因为是树形结构,所以对于边(u,v),只有边左边的点都通过这条边连边右边的点,才能使得总距离最远,于是就可以看出这是一道简单的树形dp了。这条边用的次数就是两边连的边数。。。 #pragma...

jishublog 167

hdu4118

题意:       给你一颗无向带权树,每个定点上有一个人,问所有定点都不在自己位置上的最长路径总和是多少..   思路:       其实很简单,贪心的想下,既然要求全局最大,那么对于每一条边用的次数越多越好, 对于每一条边 ans +=  他的权值*min(他左边点的个数,有边点的个数)//为了保证每一个都在边的另一面找到位置,最后输出ans * 2,因为是双向的,a ->b 那

天使也掉毛 778

hdu4118 Holiday's Accommodation(树形dp)

hdu4118题目给你一棵树,树的边有边权,每个节点代表一个人,每个人都要到另一个人的家里且两个人不能同时在一个点,且走的路是最短的路,问走的最多路程的情况的路程是多少。思路这道题着眼点不能放到点上,我们要看边,对于一条边,两端有点经过它,考虑点比较少的那一端,经过这条边的点数最多就是少的那端乘以2(出来多少就进去多少,且要根据少的那端的容量),为了让这条边利用最大化,我们就让结果加上2*少的点数*

天道酬勤 531

使用栈实现DFS(非递归DFS)

图片摘自:点击打开链接 #include #include #define N 4 //定义图中点个数 int a[N][N] = {{-1,1,1,-1},{1,-1,-1,1},{1,-1,-1,1},{-1,1,1,-1}}; //邻接矩阵,-1无边 int label[N] = {0}; //标记数组,0未标记 //定义栈及其方法 struct Stack {

ZD的博客 2万+

HDU 4118 Holiday's Accommodation

Holiday's Accommodation Time Limit: 8000/4000 MS (Java/Others)Memory Limit: 200000/200000 K (Java/Others)Total Submission(s): 2009Accepted Submission(s): 558 Problem Description Nowadays, p...

weixin_33696822的博客 172

2011 ACM/ICPC Chengdu Regional Preliminary 出题报告

先说对不起! 非常非常对不起大家,1008出了那么大的事故! 然后简单写一下出题报告,这次出题之前,我们定的原则就是经历不考模板题,多考一些思维题,最后基本做到了这点。另外在不透露题意的前提下,尽量把样例给强一点,这样让OJ的压力小一些,其实题目加上去以后,觉得有些题目的

魔神翼 1033
上一篇: ACM数论札记
下一篇: spoj9952
琴空
博客等级 码龄16年 48粉丝 82原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值