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

最新文章

  1. UE4 Tutorial - Custom Mesh Component 用于绘制自定义网格的插件CustomMeshComponent
  2. 淘宝账号基于OAuth2.0的登录验证授权登陆第三方网站
  3. Java学习-026-类名或方法名应用之二 -- 统计分析基础
  4. linux 查看cpu 内存 硬盘 文件夹大小
  5. 自己修改select的样式(修改select右边的小三角)
  6. 运行 maven install的时候出现错误 not a jre
  7. 好的组件,无须太复杂 – KISSY Slide 组件简介
  8. SQLsever2008 远程连接错误 linq
  9. Html&lt;img&gt;标签特写 2017-03-10 AM
  10. (转)详解JS位置、宽高属性之一:offset系列
  11. Sql 的 RAISERROR用法
  12. VSCode 插件推荐
  13. sql server导出数据结构
  14. Android 解压zip文件(支持中文)
  15. 为什么选择 Intellij IDEA 作为日常开发工具
  16. java 11 局部变量类型推断
  17. 激活函数——sigmoid函数(理解)
  18. Java反射之基础概念
  19. Skip the Class
  20. SQL Server 定价及授权方式

热门文章

  1. 学习python的编程语言
  2. Django3.X使用富文本编辑器kindereditor上传图片时一直转圈圈,如何解决
  3. FAQ 关于pip你应该知道的一些技巧
  4. CentOS安装mysql、MariaDB以及更改数据库存储路径
  5. Vue框架-03:JS的几种循环方式,Key值的解释,数组/对象的检测与更新,input事件,v-model数据双向绑定,过滤案例,事件修饰符,按键修饰符,表单控制
  6. element el-table固定列凹陷问题
  7. JZOJ 7685. 【2022.10.06冲剌NOIP2022模拟】奇怪的函数(function)
  8. JZOJ 6904. 【2020.11.28提高组模拟】T3 树上询问(query)
  9. [SWPUCTF 2021 新生赛]jicao
  10. php中 mysql 中文乱码解决办法