题解 UVA10859 【Placing Lampposts】
2024-10-21 02:49:06
交了N次,重构一次代码终于过了.....
题意:一片森林,1.输出占领所有边需要的最小的路灯个数 2.输出两端点均被占领的边的条数 3.只有一端被占领的边的条数
还是比较简单的
开始的时候思路不够清晰,写的时候很多东西都没注意到
导致一直WA,重构的时候好多了,一遍过
开两个DP数组,一个存路灯个数,一个存两端都被占领的边的个数
感觉更好理解一些
以下是代码
#include<cstdio>
#include<cstring>
#define N 100005
int n,m,cnt,T,ans1,ans2,a,b;
int head[N],vis[N];
int dp[N][2],f[N][2];
struct node{
int v,nex;
}e[N];
void dfs(int u,int fa){
dp[u][1]=1;
vis[u]=1;
for(int i=head[u];i;i=e[i].nex){
int v=e[i].v;
if(vis[v]) continue;
dfs(v,u);
dp[u][0]+=dp[v][1];
f[u][0]+=f[v][1];
if(dp[v][1]<dp[v][0]){
dp[u][1]+=dp[v][1];
f[u][1]+=f[v][1]+1;
}
else if(dp[v][1]>dp[v][0]){
dp[u][1]+=dp[v][0];
f[u][1]+=f[v][0];
}
else{ //这里进行一步特判,满足第二个条件
dp[u][1]+=dp[v][0];
if(f[v][1]+1>f[v][0]){
f[u][1]+=f[v][1]+1;
}
else{
f[u][1]+=f[v][0];
}
}
}
}
void add(int u,int v){
cnt++;
e[cnt].v=v;
e[cnt].nex=head[u];
head[u]=cnt;
}
void init(){
cnt=ans1=ans2=0;
memset(head,0,sizeof head);
memset(vis,0,sizeof vis);
memset(dp,0,sizeof dp);
memset(f,0,sizeof f);
}
int main(){
scanf("%d",&T);
while(T--){
init();
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&a,&b);
a++,b++;
add(a,b);add(b,a);
}
for(int i=1;i<=n;i++){
if(!vis[i]){ //可能是森林,注意!!
dfs(i,0);
if(dp[i][0]>dp[i][1]){
ans1+=dp[i][1];
ans2+=f[i][1];
}
else if(dp[i][0]<dp[i][1]){
ans1+=dp[i][0];
ans2+=f[i][0];
}
else{ //同上
ans1+=dp[i][0];
if(f[i][1]>f[i][0]){
ans2+=f[i][1];
}
else{
ans2+=f[i][0];
}
}
}
}
printf("%d %d %d\n",ans1,ans2,m-ans2);
}
return 0;
}
最新文章
- UE4 Tutorial - Custom Mesh Component 用于绘制自定义网格的插件CustomMeshComponent
- 淘宝账号基于OAuth2.0的登录验证授权登陆第三方网站
- Java学习-026-类名或方法名应用之二 -- 统计分析基础
- linux 查看cpu 内存 硬盘 文件夹大小
- 自己修改select的样式(修改select右边的小三角)
- 运行 maven install的时候出现错误 not a jre
- 好的组件,无须太复杂 – KISSY Slide 组件简介
- SQLsever2008 远程连接错误 linq
- Html<;img>;标签特写 2017-03-10 AM
- (转)详解JS位置、宽高属性之一:offset系列
- Sql 的 RAISERROR用法
- VSCode 插件推荐
- sql server导出数据结构
- Android 解压zip文件(支持中文)
- 为什么选择 Intellij IDEA 作为日常开发工具
- java 11 局部变量类型推断
- 激活函数——sigmoid函数(理解)
- Java反射之基础概念
- Skip the Class
- SQL Server 定价及授权方式
热门文章
- 学习python的编程语言
- Django3.X使用富文本编辑器kindereditor上传图片时一直转圈圈,如何解决
- FAQ 关于pip你应该知道的一些技巧
- CentOS安装mysql、MariaDB以及更改数据库存储路径
- Vue框架-03:JS的几种循环方式,Key值的解释,数组/对象的检测与更新,input事件,v-model数据双向绑定,过滤案例,事件修饰符,按键修饰符,表单控制
- element el-table固定列凹陷问题
- JZOJ 7685. 【2022.10.06冲剌NOIP2022模拟】奇怪的函数(function)
- JZOJ 6904. 【2020.11.28提高组模拟】T3 树上询问(query)
- [SWPUCTF 2021 新生赛]jicao
- php中 mysql 中文乱码解决办法