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;
}


告别偏移地址!用C# S7PLUS驱动读写西门子S7-1500符号地址(TIA Portal V17+环境配置) 本文详细介绍了如何在TIA Portal V17+环境中使用C# S7PLUS驱动读写西门子S7-1500 PLC的符号地址,告别传统的偏移地址方式。通过配置OpenSSL、集成S7PLUS驱动库,以及实战案例展示符号地址的读写方法,显著提升代码可读性和维护效率。文章还涵盖了环境准备、高级配置及常见问题解决方案,助力工业自动化开发者实现更高效的PLC通讯。 阅读详情

相关推荐

自定义css属性实现渐变边框动画

自定义cs属性实现渐变边框动画

lemon的博客 1875

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

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

便纵有千种风情 480

基于C#的ASP.NET开发的党史学习网站课设

开展党史学习教育,就是要以史为镜、以史明志,把苦难辉煌的过去、日新月异的现在、光明宏大的未来贯通起来,在鉴往知来中砥砺前行,在乱云飞渡中把准航向,在凝心聚力中团结奋斗,共同创造新的历史伟业。登陆按钮与数据库进行连接,逻辑实现是如图3.1.3所示,自己定义一个SQL查询语句,将账号、密码放入SQL查询语句中,用sqlDataReader.HasRows语句进行逐一比较,找出结果,将用户名存入session并调用cookies,如果结果存在就关闭数据库,进行数据跳转,并弹出登陆成功的提示框,并关闭数据库。

m0_62408555的博客 974

hdu4118(树形DP)

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

xiefubao的专栏 1338

Pytorch学习笔记(III)——提取特征

目录一、引言二、具体步骤1、参数模型2、网络结构3、参数载入4、特征提取器5、读取图片三、完整代码 一、引言   深度学习在许多任务中主要充当着特征学习的作用,而学习完的特征才是后续应用的一个关键。本文将主要介绍,如何提取任意目标层的特征图。   本文以输入数据为图片为例。 二、具体步骤 1、参数模型 博主使用了ResNet50训练了一个人脸识别的网络   训练完成的深度学习模型,我们会保存一...

lockonlxf的博客 2643

SceneSplat

目标:训练一个网络,输入高斯参数 → 输出与自然语言空间对齐的特征。考虑到标注语义的 3DGS 数据有限,作者设计了。策略,让模型在无标签场景上学到有用表征。都有一个与自然语言对齐的语义特征。这是整个方法的第一步,目标是让。

weixin_61091146的博客 1284

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

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

zfldongcidaci的博客 411

光耦继电器电路分析

光耦电路的分析笔记

MingYue_SSS的博客 6875

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

保姆级教程:在K230开发板上为张大头步进电机实现位置、速度、回零全功能控制

本文提供了一份详细的K230开发板与张大头步进电机的控制教程,涵盖硬件连接、协议解析、模块化代码实现及实战案例。通过位置、速度和回零功能的全面讲解,帮助开发者快速掌握步进电机的高级控制技术,适用于自动化、机器人等应用场景。

weixin_42629671的博客 710

Matlab安装Embedded Coder Support Package for Texas Instruments C2000 Processors教程

Matlab安装Embedded Coder Support Package for Texas Instruments C2000 Processors

m0_69133594的博客 2824

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

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

猫ER 728

GameFramework 框架详解之 Network网络模块 工具链

GameFramework(下面简称GF)Demo中,已经给我们提供了Network模块使用的protobuf使用的动态链接库protobuf-net.dll,但是GF并没有给我们提供protobuf相关的工具链,比如:1.proto文件自动导出对应c#的Packet类和PacketHandler类2.导出Packet类继承IReference以便使用引用池。3.自动生成Packet类和PacketHandler的Id,且保持和服务器Id一一对应。

TxNet 2902

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

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

Xcockroach的专栏 1699

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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、付费专栏及课程。

余额充值