这个题一看上去似乎很难,,   半联通子图根本就没听说过啊

但经过一段时间的思考之后似乎模型挺直接的、

但是其实,他就是问你一个选点最多的路径、 因为如果这些点如果不能能构成一条路径的话,不在路径上的点一定会以一个方向走入这条路径来 会导致相反方向的点不能到达

对于能互达的点,他们发出的任意一条边都可以作为路径,因此tarjan缩点  然后用拓扑序找路径即可

2A(第一遍MLE、)

码:

#include<iostream>
#include<cstdio>
using namespace std;
#include<vector>
#include<queue>
#include<cstring>
vector<int>v[100005];
queue<int>q;
#define N 1000005
int dis,hou[N],xia[N],zhong[N],qi[N],d[N],s[N],sta[N],top,tot,cnt,jh[N],ru[N],f[N][3],pd[N],n,m,x,max1,max2;
void jian(int x,int y)
{++tot;hou[tot]=xia[x];xia[x]=tot;zhong[tot]=y;qi[tot]=x;
}
void dfs(int o)
{int i;d[o]=++dis;s[o]=dis;sta[++top]=o; for(i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];//if(nd==fu)continue;if(d[nd]==0){         dfs(nd);s[o]=min(s[o],s[nd]);}else if(jh[nd]==0)s[o]=min(s[o],s[nd]);       }if(s[o]==d[o]){    ++cnt;while(sta[top]!=o){jh[sta[top]]=cnt;v[cnt].push_back(sta[top]);top--;       }   jh[sta[top]]=cnt;v[cnt].push_back(sta[top]);top--;     }
}
void dp()
{int i,j;for(i=1;i<=m;i++){if(jh[qi[i]]!=jh[zhong[i]])ru[jh[zhong[i]]]++;     }for(i=1;i<=cnt;i++){if(ru[i]==0)q.push(i);}while(!q.empty()){int st=q.front();f[st][0]+=v[st].size();if(f[st][1]==0)f[st][1]=1;q.pop();for(i=0;i<v[st].size();i++){int st2=v[st][i];for(j=xia[st2];j!=-1;j=hou[j]){int nd=zhong[j];if(jh[nd]==st)continue;ru[jh[nd]]--;if(pd[jh[nd]]!=st){if(f[jh[nd]][0]<f[st][0]){f[jh[nd]][0]=f[st][0];    f[jh[nd]][1]=f[st][1];}else if(f[jh[nd]][0]==f[st][0]){f[jh[nd]][1]+=f[st][1];f[jh[nd]][1]%=x;}pd[jh[nd]]=st;    }   if(ru[jh[nd]]==0){q.push(jh[nd]);}}   }   }
}
int main()
{memset(xia,-1,sizeof(xia));int i,a,b;scanf("%d%d%d",&n,&m,&x);for(i=1;i<=m;i++){scanf("%d%d",&a,&b);jian(a,b);ru[b]++;}for(i=1;i<=n;i++)if(jh[i]==0)dfs(i);memset(ru,0,sizeof(ru));dp();for(i=1;i<=cnt;i++){if(max1<f[i][0])
{max1=f[i][0];max2=f[i][1];
}else   if(max1==f[i][0])max2+=f[i][1],max2%=x;}printf("%d\n%d",max1,max2);
}

2017.9.2 最大半联通子图 思考记录相关推荐

  1. 有向图的强联通分量之:【求最长链】【求最长链的方案数(图论中的方案数DP)】【最长链和最大半联通子图 节点数相同】【最长链与最大半联通子图等价又不完全等价】

    注意了: 最长链与最大半联通子图是等价又不完全等价的. 最大半联通子图的节点数 会 与最长链的节点数相同, 但是边数的话,最大半联通子图还是会加进 两个点之间的所有边 但是本题的主要目的是求 最长链上 ...

  2. 有向图的强连通分量——最大半联通子图

    最大半联通子图 一个有向图 G=(V,E)G=(V,E)G=(V,E) 称为半连通的 (Semi-Connected),如果满足:∀u,v∈V,满足u→v或v→u∀u,v∈V,满足 u→v 或 v→u ...

  3. 2017.3.6~2017.3.7 Harry And Magic Box 思考记录(特别不容易)

    英文题,看翻译做 看到这个题竟然一下找到了思路:    组合数+容斥:: 但是容斥不太懂 好像要做这个题必须先推容斥.... 试一试吧. 然并卵,花了一个晚上,还是求不出来. 根据题目的重复关系,确实 ...

  4. 2017.10.17 CF#441 F题 思考记录

    .果然没有题解做题感觉是不一样的. 这个F题可能是最像往常B题的题了(往常B题就是dp,还一般都不难) 首先这个是|,所以|的数越多,它一定是不降的 那么合法的一定是一个数到一个数往后的数所构成的所有 ...

  5. 2017.10.8 球形空间产生器sphere 思考记录

    圆心上的点到各点之间的距离相等,所以根据距离公式  sqrt (  (x-x1)^2  +(y-y1)^2 + (z-z1)^2)  可以由相邻两个式子列等式拆平方得到一元一次方程 然后消元求方程的解 ...

  6. 2017.10.7 最长上升子序列 思考记录

    由于他添加的数字单调上升,所以答案只会在插入的那个数的f值上更新.. 由于之前插入的数都比这个数小,所以直接找区间f最大值.. 这题splay比上个play题好写太多了 不调不试1A  splay辣 ...

  7. 2017.9.23 Count on a tree 思考记录

    这个题就是把区间第k大搬到了树上.. 于是想到链剖.但链剖是要支持区间合并的,第k大显然不可以合并,那怎么办呢 所以就可以容斥,,把所有重链起点终点用两个rt截下来,再把每个+和每个-离散下来,然后由 ...

  8. 2017.8.9 老C的键盘 思考记录

    这个题一开始想错了.  一开始本来打算每个点存三个值,一个比它大的数的个数,一个不确定的个数,一个比他小的个数.但这是把不同形态拆成不相关的几部分强行存到数组里,不能反映不同排列形态的关系,而且不确定 ...

  9. 2017.6.12 crash的数字表格 思考记录

    很坑的一个题.就是让你求: 可以显然化为: 然后这个gcd就是突破口了,可以考虑gcd的约数. 注:这里的贡献不算1/gcd 这里有个小技巧,就是在设计F和f时,注意是几个互斥的f值相加,并保证相加后 ...

最新文章

  1. python类型提示模块包_(任何)python模块的类型提示是什么?
  2. java字数统计,求大神教我,java语言里的字数统计功能的代码?
  3. python(matplotlib7)——subplot 一个figure中国显示几个小图 分格显示
  4. [转贴]暴雪的霸王条款是否合理?
  5. python中 1.34e3_Python快速编程入门——第2章 Python基础语法
  6. 支付宝五福开奖!几个亿的项目你分到几块?
  7. 苹果提交版本后显示”缺少出口合规证明“的解决办法
  8. mysql load data 一行_MySQL LOAD DATA LOCAL INFILE仅导入一行
  9. 计算机组成原理(白中英) 第七章 课后题答案
  10. 广义pareto分布_帕累托分布
  11. electron快捷键
  12. 浏览器查看Base64格式的图片
  13. Script Control 组件Win7 X64平台运行问题及示例
  14. no.8 python 和 Linux (笔记)
  15. Android apk安装报错:应用未安装 软件包似乎已损坏
  16. 上交计算机考研专业课,2020上海交通大学计算机考研经验,过来人谈考研
  17. win10分区工具下载
  18. 2021年茶艺师(初级)考试资料及茶艺师(初级)考试技巧
  19. rtx3090ti什么水平 rtx3090ti显卡什么级别 rtx3090ti显卡怎么样
  20. PCL报错:C2248 “pcl::Registration<PointSource,PointTarget,Scalar>::setInputCloud”

热门文章

  1. Spark之RDD实战2
  2. 多维标度法MDS古典解的证明与R语言实现
  3. 深度学习经典算法 | 蚁群算法解析
  4. FPGA _Verilog HDL_8位加法计数器设计实验
  5. python多进程间通信_Python 多进程编程之 进程间的通信(Queue)
  6. 科普:Windows下Netcat使用手册
  7. Python turtle库绘制奥运五环
  8. 中职学校计算机教学背景,创新网络背景下中职院校计算机教学模式探析
  9. matlab std函数_如何利用Matlab进行小波分析
  10. idea错误提示不明显_微信公众号扫一扫功能提示:10003 redirect_uri域名与后台配置不一致错误解决方案...