qbxt集训cogs2682. 膜拜
【题目描述】
有一个n个点m条边的有向图,xlm可以从1号点出发在图上走,并且最终需要回到1号点。每个点都有一个神犇(包括1号点),每次经过一个没到过的点,xlm都会膜拜那位神犇。xlm希望膜拜尽可能多的神犇。
由于xlm膜拜神犇的欲望非常强烈,所以他可以有一次机会逆着一条有向边的方向走。(需要注意的是,这条边的方向不会改变)
你现在想知道,xlm最多能膜拜多少神犇?
【输入格式】
输入到OrzOrz.in
第一行2个整数n、m,分别表示图的点数和边数。
第2行到底m+1行,每行两个整数u,v,描述一条u到v的有向边。
【输出格式】
输出到OrzOrz.out
一行一个整数表示xlm最多能膜拜多少神犇。
【样例输入】
7 10 1 2 3 1 2 5 2 4 3 7 3 5 3 6 6 5 7 2 4 7
【样例输出】
6
【提示】
【数据范围】
对于25%的数据,保证n<=100,m<=250,
对于43.75%的数据,保证n<=3,000,m<=7,000。
对于100%的数据,保证n,m<=100,000。
【来源】
QBXT春令营精英班第一次测试T2
先tarjan缩一波点
那么图变成了一个DAG
考虑一条边被反转的贡献 是从1到这条边终点最长路+从1到这条边起点最长路-1号点所在scc点数
最长路用spfa跑
时间复杂度O(n*玄学)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
const int maxn=100000+10;
vector<int>A[maxn];
vector<int>G[maxn];
vector<int>RG[maxn];
int f[maxn],g[maxn];
int s[maxn];
int dfn[maxn],low[maxn];
int ins[maxn];
int ind=0;
int edge=1;
int vis[maxn];
int size[maxn];
int top=0;
int fa[maxn];
queue<int>q;
inline void tarjan(int x){dfn[x]=low[x]=++ind;s[++top]=x;ins[x]=1;for(int i=0;i<A[x].size();i++){int u=A[x][i];if(!dfn[u]){tarjan(u);low[x]=min(low[x],low[u]);}else if(ins[u])low[x]=min(low[x],dfn[u]);}if(low[x]==dfn[x]){while(s[top]!=x){size[x]++;fa[s[top]]=x;ins[s[top]]=0;top--;}size[x]++;ins[x]=0;fa[x]=x;top--;}
}
int main(){freopen("OrzOrz.in","r",stdin);freopen("OrzOrz.out","w",stdout);int n,m;scanf("%d %d",&n,&m);int x,y;for(int i=1;i<=m;i++){scanf("%d %d",&x,&y);A[x].push_back(y);}for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);for(int i=1;i<=n;i++)for(int j=0;j<A[i].size();j++)if(fa[i]!=fa[A[i][j]]){G[fa[i]].push_back(fa[A[i][j]]);RG[fa[A[i][j]]].push_back(fa[i]);;}q.push(fa[1]);memset(f,-127/2,sizeof(f));memset(vis,0,sizeof(vis));f[fa[1]]=size[fa[1]]; vis[fa[1]]=1; while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<G[x].size();i++){int u=G[x][i];if(f[u]<f[x]+size[u]){f[u]=f[x]+size[u];if(!vis[u]){vis[u]=1;q.push(u);}}}vis[x]=0;}q.push(fa[1]);memset(g,-127/2,sizeof(g));memset(vis,0,sizeof(vis));g[fa[1]]=size[fa[1]];while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<RG[x].size();i++){int u=RG[x][i];if(g[u]<g[x]+size[u]){g[u]=g[x]+size[u];if(!vis[u]){vis[u]=1;q.push(u);}}}vis[x]=0;}int ans=size[fa[1]];for(int i=1;i<=n;i++){if(fa[i]!=i)continue;for(int j=0;j<G[i].size();j++){int u=G[i][j];if(g[i]+f[fa[u]]-size[fa[1]]>ans)ans=g[i]+f[fa[u]]-size[fa[1]];}}printf("%d\n",ans);//for(int i=1;i<=n;i++)// printf("%d\n",g[i]);
return 0;
}
qbxt集训cogs2682. 膜拜相关推荐
- 7.6~7.20集训总结(一)
7.6~7.20集训总结(一) 这次暑假集训呢, 感觉收获很多,在大佬们的碾压下也感受到了自己的不足,掌握的知识还不牢固,需要多加巩固! 此外,膜拜一下qt苣佬, 看了qt苣佬的博客,发现自己是如此的 ...
- 清北NOIP训练营集训笔记——图论(提高组精英班)
清北NOIP训练营集训笔记--图论(提高组精英班) 本文摘自清北学堂内部图论笔记,作者为潘恺璠,来自柳铁一中曾参加过清北训练营提高组精英班,笔记非常详细,特分享给大家!更多信息学资源关注微信订阅号no ...
- 2016暑假集训总结
Preface 这是蒟蒻lyd729在初二升初三的暑假里训练的总结. 来看看一年前的lyd729写的暑假集训总结(链接),真是觉得自己长大了好多. 这一年发生了太多故事.(我来讲故事啦) 去年,一升初 ...
- 2014年CCNU-ACM暑期集训总结
2014年CCNU-ACM暑期集训总结 那个本期待已久的暑期集训居然就这种.溜走了.让自己有点措手不及.很多其它的是对自己的疑问.自己是否能在ACM这个领域有所成就.带着这个疑问,先对这个暑假做个总结 ...
- 【Never Stop】联赛集训记录
始于10/01/2017. Day I: T2图论,没想到.T3谜一样DP(是从来没意识到还可以这样). rank10. 下午刷了点题,CDQ也只打出一个板子,感觉自己不在状态? ========== ...
- WC2018集训 吉老师的军训练
WC2018集训 吉老师的军训练 #include<bits/stdc++.h> #define RG register #define IL inline #define _ 20000 ...
- iOS-仿膜拜贴纸滚动(物理仿真)
导读 简单用OC写了一个小球滚动效果; 类似平衡球. GitHub地址:https://github.com/wangliujiayou/WLBallView 欢迎Star. 膜拜滚动 进入正题-(传 ...
- 暑期集训5:并查集 线段树 练习题G: HDU - 1754
2018学校暑期集训第五天--并查集 线段树 练习题G -- HDU - 1754 I Hate It 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让 ...
- 暑期集训5:并查集 线段树 练习题F: HDU - 1166
2018学校暑期集训第五天--并查集 线段树 练习题F -- HDU - 1166 敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A ...
最新文章
- [Ops]阿里云服务器上无法发送邮件的现象原因及解决
- [swift] Async
- 01-缓存一致性---基础知识
- 一起认识FileShare
- volatile与synchronized 同步原理基础讲解
- java 开发帮助_java的简单编程请帮助
- 【通俗易懂】手把手带你实现DeepFM!
- android 继承现有控件,Android继承现有控件拓展实现自定义控件textView
- LightGBM大战XGBoost,谁将夺得桂冠?
- asp.net中日志框架Log4Net的使用
- 泛型使用思想,记一次java泛型使用经历
- php 密匙加密解密,带密匙的php加密解密示例分享
- updateStateByKey算子入门案例
- SnackbarUtils:一行代码搞定Snackbar
- plc编程及应用_常见进制在PLC编程中的应用,学PLC必备~
- Kindle3 字典安装
- 生成密钥、配送密钥和更新密钥
- QT 控件增加双击事件
- UE官网ARPG游戏学习笔记1
- 项目无法启动,Disconnected from the target VM
热门文章
- cPanel主机空间安装Magento规范准确详细教程
- java中从1到101的素数_「1是不是质数」在c#中完成1到10的素数(1不是素数) - seo实验室...
- Django的ManyToManyField(多对多)的使用以及through的作用
- 必做作业2:视频剪辑软件调研
- 动态RAM的基本单元电路
- 七月在线 《图像识别与检测》
- 苹果公司创始人乔布斯生平简介
- 解决网页不能粘贴的问题
- 结构光三维测量几种比较成熟的方法
- 开放信息抽取(OIE)系统(四)-- 第三代开放信息抽取系统(基于子句, clause-based, 句子重组、删减)