2018.11.06 bzoj1093: [ZJOI2007]最大半连通子图(缩点+拓扑排序)
传送门
先将原图缩点,缩掉之后的点权就是连通块大小。
然后用拓扑排序统计最长链数就行了。
自己yyyyyy了一下一个好一点的统计方法。
把所有缩了之后的点都连向一个虚点。
然后再跑拓扑,这样最后虚点的答案就是要求的。
代码:
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
const int N=1e5+5,M=1e6+5;
int low[N],tot=0,dfn[N],n,m,mod,first[N],cnt=0,stk[N],top=0,col[N],sig=0,val[N],f[N],g[N],du[N],pred[N];
bool vis[N],in[N];
struct edge{int v,next;}e[M<<1];
vector<int>G[N];
inline void add(int u,int v){e[++cnt].v=v,e[cnt].next=first[u],first[u]=cnt;}
inline void tarjan(int p){
dfn[p]=low[p]=++tot,stk[++top]=p,in[p]=1;
for(int i=first[p];i;i=e[i].next){
int v=e[i].v;
if(!dfn[v])tarjan(v),low[p]=min(low[p],low[v]);
else if(in[v])low[p]=min(low[p],dfn[v]);
}
if(dfn[p]==low[p]){
++sig;
while(1){
int x=stk[top--];
++val[col[x]=sig],in[x]=0;
if(x==p)break;
}
}
}
inline void topsort(){
queue<int>q;
for(int i=1;i<=sig;++i)if(!du[i])f[i]=val[i],g[i]=1,q.push(i);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=G[x].size()-1;~i;--i){
int v=G[x][i];
--du[v];
if(!du[v])q.push(v);
if(pred[v]==x)continue;
if(f[x]+val[v]>f[v])f[v]=f[x]+val[v],g[v]=g[x];
else if(f[x]+val[v]==f[v])g[v]=(g[v]+g[x])%mod;
pred[v]=x;
}
}
}
int main(){
freopen("lx.in","r",stdin);
n=read(),m=read(),mod=read();
for(int i=1,u,v;i<=m;++i)u=read(),v=read(),add(u,v);
for(int i=1;i<=n;++i)if(!dfn[i])tarjan(i);
for(int i=1;i<=sig;++i)G[i].push_back(sig+1),++du[sig+1];
for(int i=1;i<=n;++i)for(int j=first[i];j;j=e[j].next)if(col[i]^col[e[j].v])G[col[i]].push_back(col[e[j].v]),++du[col[e[j].v]];
topsort(),cout<<f[sig+1]<<'\n'<<g[sig+1];
return 0;
}
2018.11.06 bzoj1093: [ZJOI2007]最大半连通子图(缩点+拓扑排序)的更多相关文章
- bzoj1093[ZJOI2007]最大半连通子图(tarjan+拓扑排序+dp)
Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u ...
- bzoj1093 [ZJOI2007]最大半联通子图 缩点 + 拓扑序
最大半联通子图对应缩点后的$DAG$上的最长链 复杂度$O(n + m)$ #include <cstdio> #include <cstring> #include < ...
- bzoj 1093: [ZJOI2007]最大半连通子图【tarjan+拓扑排序+dp】
先tarjan缩成DAG,然后答案就变成了最长链,dp的同时计数即可 就是题面太唬人了,没反应过来 #include<iostream> #include<cstdio> #i ...
- bzoj 1093 [ZJOI2007]最大半连通子图——缩点+拓扑
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1093 缩点+拓扑,更新长度的时候维护方案数. 结果没想到处理缩点后的重边,这样的话方案数会算 ...
- BZOJ1093 [ZJOI2007]最大半连通子图
Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u ...
- bzoj1093: [ZJOI2007]最大半连通子图 scc缩点+dag上dp
一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若G'=(V ...
- BZOJ1093 [ZJOI2007]最大半连通子图 【tarjan缩点 + DAG最长路计数】
题目 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意 两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若G ...
- BZOJ1093: [ZJOI2007]最大半连通子图(tarjan dp)
题意 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若G' ...
- 【tarjan 拓扑排序 dp】bzoj1093: [ZJOI2007]最大半连通子图
思维难度不大,关键考代码实现能力.一些细节还是很妙的. Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于 ...
随机推荐
- 如何利用FPGA进行时序分析设计
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器 ...
- Netty实践一(数据通信)
我们需要了解下在真正项目应用中如何去考虑Netty的使用,大体上对于一些参数设置都是根据服务器性能决定的.这个不是最主要的. 我们需要考虑的问题是两台机器(甚至多台)使用Netty的怎样进行通信,大体 ...
- [Java学习]面向对象-super关键字;final关键字
super关键字 super代表的是当前子类对象中的父类型特征,可以看做是this的一部分.与this不同,不是引用,不存储对象内存地址. super可以用在什么位置 1 可以用在成员方法中.不能用在 ...
- Qt: 加入打印支持
写记事本打印功能所遇问题,记录以便于查阅. 在vs系统中开发Qt,加入打印支持,不似在QtCreator之pro文件中中加QT +=printsupport解决. 而要在vs(以vs2015为例)中, ...
- 解决在Mac的Vmware Fusion中装win7系统和mac原生系统直接切换win7系统分辨率变化的问题
虚拟机 - 设置 - 显示屏 - 全屏显示retina (此选项钩去掉)
- jquery实现元素高度变化页面变化
试了几种方法包括有资料说的h5新特性,都没能满足我的需求.我的需求如下: 元素高度是动态可变的,比如可拖动teatarea元素 最后用到了指针监听事件解决了 @参考文档 $(document).mou ...
- 8.16 val()和html()的问题
今天在做关闭模态框重置表单时,关闭模态框后输入框里的值还是在,不知道怎么回事? 感谢wd啦,原来我在初始化这个输入框的时候就写错了,输入框写值的时候用的是val(),而我和上面的div一样,用的是ht ...
- iOS 10 之后权限设置
iOS 10 之后权限设置 麦克风权限:Privacy - Microphone Usage Description 是否允许此App使用你的麦克风? 相机权限: Privacy - Camera U ...
- Python爬虫项目--爬取自如网房源信息
本次爬取自如网房源信息所用到的知识点: 1. requests get请求 2. lxml解析html 3. Xpath 4. MongoDB存储 正文 1.分析目标站点 1. url: http:/ ...
- RSA加密遇到的一个问题
1,最近在项目里面使用了RSA加密解密的功能 出现的异常情况是加解密时对于有中文的情况会出现乱码,导致无法正常解析参数 解决方案人认为:针对中文应该 先encode ,这样能有效的避免乱码