NOIP模拟赛 队爷的讲学计划
队爷的讲学计划
问题描述
队爷为了造福社会,准备到各地去讲学。他的计划中有n 个城市,从 u 到 v 可能有一条单向道路,通过这条道路所需费用为 q。当队爷在 u 城市讲学完之后,u 城市会派出一名使者与他同行,只要使者和他在一起,他到达某个城市就只需要花 1 的入城费且只需交一次,在路上的费用就可免去。。但是使者要回到 u 城市,所以使者只会陪他去能找到回 u 城市的路的城市。。队爷从 1 号城市开始讲学,若他在u 号城市讲学完毕,使者会带他尽可能多的去别的城市。
他希望你帮他找出一种方案,使他能讲学到的城市尽可能多,且费用尽可能小。
输入文件
第一行 2 个整数 n,m。
接下来 m 行每行 3 个整数 u,v,q,表示从 u 到 v 有一条长度为 q的单向道路。
输出文件
一行,两个整数,为最大讲学城市数和最小费用。
数据规模与约定
对于 20%的数据,1<=n<=20;
对于另外 10%的数据,城市网络为一条单向链;
对于 60%的数据,1<=m<=200000
对于 100%的数据,1<=n<=100000
1<=m<=500000,1<=q<=1000, 保证无自环无重边。
分析
对于那些可以回到自己的点一定在一个强连通分量中,所以先用tarjan算法缩点重新建边之后得到一个DAG(有向无环图),可以用拓扑排序,也可以用spfa,这题数据不卡spfa。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int N=100010; const int M=500010; inline int read(){int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f; } int n,m,tot,idx,top,cnt,ans; int head[N],dis[N],u[M],v[M],w[M],f[N],g[N]; int dfn[N],low[N],sta[N],B[N],du[N],s[N]; bool instack[N]; queue<int>q; struct node{int next,to,dist; }e[M]; inline void ins(int from,int to,int dist){e[++tot].next=head[from];e[tot].to=to; e[tot].dist=dist;head[from]=tot; } void tarjan(int x){dfn[x]=low[x]=++idx;sta[++top]=x; instack[x]=true;for(int i=head[x];i;i=e[i].next)if(!dfn[e[i].to]){tarjan(e[i].to);low[x]=min(low[x],low[e[i].to]);}else if(instack[e[i].to])low[x]=min(low[x],dfn[e[i].to]);if(dfn[x]==low[x]){++cnt; int y;do{y=sta[top--];instack[y]=false;B[y]=cnt; ++s[cnt];}while(x!=y);} } void dfs(int x){for(int i=head[x];i;i=e[i].next)if(++du[e[i].to]==1) dfs(e[i].to); } int main(){freopen("teach.in","r",stdin);freopen("teach.out","w",stdout);n=read();m=read();for(int i=1;i<=m;++i){u[i]=read();v[i]=read();w[i]=read();ins(u[i],v[i],w[i]);}for(int i=1;i<=n;++i)if(!dfn[i]) tarjan(i);tot=0;memset(head,0,sizeof(head));for(int i=1;i<=m;++i)if(B[u[i]]!=B[v[i]])ins(B[u[i]],B[v[i]],w[i]);memset(g,0x3f,sizeof(0x3f));f[B[1]]=g[B[1]]=s[B[1]]; --g[B[1]];dfs(B[1]); q.push(B[1]);while(!q.empty()){int x=q.front();q.pop();for(int i=head[x];i;i=e[i].next){int to=e[i].to; --du[to];if(!du[to]) q.push(to);if(f[x]+s[to]>f[to]){f[to]=f[x]+s[to]; g[to]=g[x]+e[i].dist+s[to]-1;}else if(f[x]+s[to]==f[to])g[to]=min(g[to],g[x]+e[i].dist+s[to]-1);}}for(int i=1;i<=cnt;++i)if(f[i]>f[ans]) ans=i;else if(f[i]==f[ans]&&g[i]<g[ans]) ans=i;printf("%d %d\n",f[ans],g[ans]);return 0; }
转载于:https://www.cnblogs.com/huihao/p/7786461.html
NOIP模拟赛 队爷的讲学计划相关推荐
- NOIP模拟赛 队爷的 Au Plan
队爷的 Au Plan 问题描述 队爷为了变得越来越神,他给自己制定了 n 个任务,编号为 1,2,-,n.队爷在完成这些任务之前有一个初始兴奋值 m,每个任务都有一个难度值 hard[i],且对于任 ...
- 队爷的讲学计划 (强连通缩点+最短路)
队爷的讲学计划 [问题描述] 队爷为了造福社会,准备到各地去讲学.他的计划中有n个城市,从u到v可能有一条单向道路,通过这条道路所需费用为q.当队爷在u城市讲学完之后,u城市会派出一名使者与他同行,只 ...
- 队爷的讲学计划(tarjan +拓扑排序)
题目描述 队爷为了造福社会,准备到各地去讲学.他的计划中有n个城市,从u到v可能有一条单向道路,通过这条道路所需费用为q.当队爷在u城市讲学完之后,u城市会派出一名使者与他同行,只要使者和他在一起,他 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- 【noip模拟赛4】Matrix67的派对 暴力dfs
[noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...
- jyzy noip模拟赛5.22-2
不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...
- NOIP模拟赛csy2021/10/30
NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...
- 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告
[WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...
最新文章
- python基础语法手册format-Python基础语法-格式化输出
- golang中的可见性
- 自己遇到oracle的错误记录
- java word 转换 图片_怎样把手机上的图片转换成word?
- linux 网络块存储,网络存储集群
- windows启动管理器_必备的9个Windows设置技巧,可以将Windows 10的性能大幅提高
- PCA计算点云的法线
- 应用chroot构建最小运行系统
- 思科模拟器Cisco Packet Tracer的下载与安装
- 贴片电阻各种封装规格及阻值标注方法
- JS清除IE浏览器缓存的方法
- Linux Thermal Framework分析及实施
- 了解前沿信息科技 做好学习就业规划
- Python3爬取前程无忧数据分析工作并存储到MySQL
- 大型医院HIS系统源码 优质源码 医院管理系统源码
- clojure 开发工具_Clojure Web开发–最新技术–第2部分
- Java后端返回Long类型数据与前端展示不一致(精度丢失)
- Java web--利用java操作excel文档
- 获得lazada商品详情
- 由安卓开发中的一个坑引发的问题解决之道浅析
热门文章
- performing vcs refresh卡住不动解决方法
- 【浙江大学】一个开源的知识图谱表示学习框架
- java anon,shiro anon 不生效
- #ACCV2022还有两周截稿#疫情过后期待相聚澳门,相邀参与亚洲视觉盛会
- 基于物理信息深度学习的交通状态估计:以LWR和CTM模型为例
- lly的数列询问(最小生成树 + 思维)
- java实现word(docx)在线编辑(word转html,html转word)——解读document.xml结构
- LaTex学习-安装
- 心理压力的测试软件,心理压力测量量表(WYB)
- 网易云信七鱼市场总监姜菡钰:实战解读增长黑客在B端业务的运用