题目链接

题意:给出有向无环图,删去若干条边,使得满足以下两个条件:

(1)对于每一个结点,其出边比原来少,除非初始出边就为0;

(2)对于每一个结点,其入边比原来少,除非初始入边就为0;

操作后,选择一个点集S,S中的任意两个元素u,v都满足:u能到v或者v能到u。

请得到最大的|S|

题解:由于是个有向无环图。所以S中的点一定是从u能到v,而v到不了u。

那么S集合一定是一条链上的所有点;

发现了这个问题后就好写了,可以发现用dp做。

状态表示:f[u]表示操作后以u为起点的最长链。

状态转移:f[u]=f[u]+max(f[v1],f[v2],f[v3]...);

状态转移的条件:u结点的出度>1,v结点的入度>1

为什么是这样转移,为什么是这样的条件,自己画个图想把,很容易想明白的。

最后答案就是所有点的f[u]中的最大值

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
int n,m,idx;
int h[maxn];
struct Edge{int v,nxt;
}edge[maxn<<1];
int f[maxn],din[maxn],dout[maxn];
void add(int u,int v){edge[idx].v=v;edge[idx].nxt=h[u];h[u]=idx++;
}
void dfs(int u){if(f[u]) return ;f[u]=1;for(int i=h[u];~i;i=edge[i].nxt){int v=edge[i].v;dfs(v);}int d=0;for(int i=h[u];~i;i=edge[i].nxt){int v=edge[i].v;if(dout[u]>1&&din[v]>1)d=max(d,f[v]);}f[u]+=d;
}
void solve(){memset(h,-1,sizeof(h));cin>>n>>m;for(int i=1;i<=m;i++){int u,v;cin>>u>>v;add(u,v);din[v]++;dout[u]++;}for(int i=1;i<=n;i++){if(!din[i]){dfs(i);}}int ans=0;for(int i=1;i<=n;i++){ans=max(ans,f[i]);}cout<<ans<<'\n';
}
int main(){ios::sync_with_stdio(false);cin.tie(0);int t;t=1;while(t--) solve();return 0;
}

CF:1674 G. Remove Directed Edges相关推荐

  1. Codeforces Round #786 (Div. 3) G. Remove Directed Edges——树形dp+记忆化

    思路参考 题目链接 思路 题目要求删除一些边,要让最后每个点的入度,出度都小于最开始的情况,或者等于0. 那么出度为1或者入度为1的边一定会被删掉,而且题目说明不存在重边和环,最后的结果一定是一条链. ...

  2. CF1674G. Remove Directed Edges dp

    Problem G dag上的dp 题意 给你一个有向无环图,你需要删去其中的若干条边,使得 对于每个节点,它的入度比原来小,或原来即为0 对于每个节点,它的出度比原来小,或原来即为0 在删边之后的图 ...

  3. 对Tensor进行变换 class torchvision.transforms.Normalize(mean, std) 给定均值:(R,G,B) 方差:(R,G,B),将会把Tensor正则化

    对Tensor进行变换 class torchvision.transforms.Normalize(mean, std) 给定均值:(R,G,B) 方差:(R,G,B),将会把Tensor正则化.即 ...

  4. js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g)...

    js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g) 一.总结 方括号:范围 圆括号:选 大括号:数量 1.js正则是在双正斜杠之中: var reg2=/[a-z]/ ...

  5. Docker:You cannot remove a running container

    2019独角兽企业重金招聘Python工程师标准>>> 错误描述:You cannot remove a running container 3293ac4d69dca61ecef7 ...

  6. ML之RS之CF:基于用户的CF算法—利用大量用户的电影及其评分数据集对一个新用户Jason进行推荐电影+(已知Jason曾观看几十部电影及其评分)

    ML之RS之CF:基于用户的CF算法-利用大量用户的电影及其评分数据集对一个新用户Jason进行推荐电影+(已知Jason曾观看几十部电影及其评分) 目录 输出结果 实现代码 输出结果 先看推荐结果显 ...

  7. 【linux系统编程】基础开发工具:gcc/g++

    Linux C/C++ 编译器 – gcc/g++ 正文开始@Assassin 目录: Linux C/C++ 编译器 -- gcc/g++ 1. gcc/g++ 基本用法: 2. C/C++编译基本 ...

  8. cf修复服务器,CF:“卡顿”问题终于得到重视!新版本宣布修复,玩家这下开心了...

    原标题:CF:"卡顿"问题终于得到重视!新版本宣布修复,玩家这下开心了 相信各位玩家都知道,CF是一款非常经典的射击类端游,早在许久之前的2008年就正式上线,一直运营至今,已经陪 ...

  9. (离散)设函数 f:A→B,g:B→C,证明:若g °f是满射,则g是满射.

    设函数f:A→B,g:B→C,证明:若g °f是满射,则g是满射. 解析:要证满射 g:B→C,对 ∀ c ∈C,∃ b∈B,c = g(b),则g满射

最新文章

  1. 什么是初效过滤器_初效过滤器主要用于过滤多少微米的杂质?
  2. OpenCV 仿射变换
  3. JS实现select去除option的使用注意事项
  4. 前端学习(2744):重读vue电商网站54之配置 HTTPS 服务
  5. 利用好手头的资源解决海量语料资源收集以及利用哈工大的LTP云平台解决依存句法和语义依存分析
  6. python读取csv文件_python配置文件的读取
  7. c语言判断字符串中是否包含非数字,【新手】【求思路】如何判断用户输入的字符串中是否含有非数字?...
  8. 一文搞懂隐马尔可夫模型(HMM)
  9. stream 定长循环_Java8之Stream流代替For循环操作
  10. 1337. 矩阵中战斗力最弱的 K 行
  11. 经典书单 —— 人文社科
  12. hdu1243 最长公共子序列(LCS)
  13. linux使用certbot,如何自动续期~
  14. 粉笔科技创新OMO一体化模式 差异化突围职教市场
  15. DCM4CHEE-ARC-LIGHT
  16. 百万互动出圈爆品复盘,小红书品牌如何高效打造爆品?
  17. P2015 二叉苹果树 树形DP
  18. 某企业发放的奖金根据利润进行提成,利润低于或等于10万元时,奖金为利润的10%;利润高于10万元低于20万元时,低于10万元部分,奖金按利润的10%提成。。。。。。
  19. 点餐小程序【源码好优多】
  20. 【双写迁移方案】实现动态切换实现分库分表

热门文章

  1. HTML5新增标签(一)
  2. DICOM图形转换(二)-- RTSTRUCT的勾画坐标数据转换
  3. 28 Oracle深度学习笔记——ORACLE自带DBMS函数包
  4. mysql 的新建查询怎么弄_在Navicat中如何新建数据库和表并做查询
  5. android 选择图片sdk,GitHub - XieZed/CameraSDK: Android多图选取,滤镜,贴纸,裁剪等类似美图秀秀的功能...
  6. 瀚高数据库闪回(APP)
  7. java输出当前时间_JAVA中获取当前系统时间 - Matrix54 - 博客园
  8. 华为OD机试题:字符串加解密
  9. python3获取2个字符中间的字符串
  10. 结构体和类的区别和使用建议