题目link

思路

反向建图,贪心跑bfs

反向建图权值从大到小跑bfs,来确定当前权值可以到达的点,在正常图(正向建边)中即是能到达它的点,然后开个visvisvis数组记录一下点是否来过,贪心下每个点只更新一次,线性复杂度.

Code

const int inf = 0x3f3f3f3f;
const int INF = ~0ULL;
const int N = 1e6+10;
int n,m;struct node{int id,w;bool operator<(const node&t) const{if(w==t.w) return id < t.id;return w > t.w;}
}a[100005];vector<int>g[100005];
int in[100005];
int f[100005];
bool st[N];
map<int,int> mp;void bfs(int u){queue<int> q;q.push(u);st[u] = 1;while(q.size()){int t = q.front();q.pop();for(auto i:g[t]){if(!st[i]){t = mp[i];a[t].w = max(a[t].w,a[mp[u]].w);st[i] = 1;q.push(i);}}}
}signed main()
{cin>>n>>m;forr(i,1,n) cin >> a[i].w,a[i].id = i;while(m--){int u,v;cin>>u>>v;g[v].push_back(u);}sort(a+1,a+1+n);forr(i,1,n) mp[a[i].id] = i;forr(i,1,n){bfs(a[i].id);}int res = 0;forr(i,1,n) res += a[i].w;cout << res << endl; return 0;
}

Tarjan+dfsTarjan+dfsTarjan+dfs
用tarjantarjantarjan算法缩完点之后直接跑一边dfsdfsdfs,因为tarjantarjantarjan之后强连通分量是逆拓扑序,直接倒着跑一遍dfsdfsdfs更新缩完点之后每个点的最大权值

typedef long long ll;
int pri[16] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};
const int inf = 0x3f3f3f3f;
const int INF = ~0ULL;
const int N = 1e6+10;
int n,m;
vector<int> g[100005],v[100005],scc[100005];
int dfn[100005],low[100005],id[100005];// id 结点在的强连通分量编号
int tim,cnt; // time 时间戳  cnt 连通分量个数
int stk[100005],top;
bool ins[100005];//是否在栈内
int num[100005];
int w[100005],val[100005];
bool st[100005];
int in[100005];
void tarjan(int u){dfn[u] = low[u] = ++tim;stk[++top] = u,ins[u] = 1;for(auto v:g[u]){if(!dfn[v]){tarjan(v);low[u] = min(low[u],low[v]);}else if(ins[v]) low[u] = min(low[u],low[v]);}if(low[u] == dfn[u]){cnt++;int y;do{y = stk[top--]; id[y] = cnt;ins[y] = 0;scc[cnt].push_back(y);}while(u != y);}
}void dfs(int u){st[u] = 1;for(auto j:v[u]){if(!st[j]) dfs(j);val[u] = max(val[u],val[j]);}
}
signed main()
{cin >> n >> m;forr(i,1,n) cin >> w[i];while(m--){int u,v;cin>>u>>v;g[u].push_back(v);}forr(i,1,n) if(!dfn[i]) tarjan(i);forr(i,1,n){for(auto j:g[i]){if(id[i] != id[j])v[id[i]].push_back(id[j]),in[id[j]]++;}}// forr(i,1,cnt){        //     cout << i <<" ";//     for(auto j:v[i]) cout << j <<" ";//     cout << endl;// }forr(i,1,cnt){int res = 0;for(auto j:scc[i]){res = max(res,w[j]);}val[i] = res;}for(int i = cnt;i;i--) if(!st[i]) dfs(i);      // forr(i,1,cnt) cout << val[i] << endl; int res = 0;forr(i,1,cnt) res += scc[i].size()*val[i];cout << res << endl;return 0;
}

“华为杯“ 武汉大学21级新生程序设计竞赛 J.传闻档案相关推荐

  1. “华为杯“ 武汉大学21级新生程序设计竞赛

    "华为杯" 武汉大学21级新生程序设计竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com) D.和谐之树(线段树) #i ...

  2. “华为杯“武汉大学21级新生程序设计竞赛

    "华为杯"武汉大学21级新生程序设计竞赛 比赛传送门 u p d : 2022.4.8 upd:2022.4.8 upd:2022.4.8 补了 I I I题. B题待补. A - ...

  3. 牛客练习-哈尔滨理工大学21级新生程序设计竞赛(同步赛)

    比赛链接:哈尔滨理工大学21级新生程序设计竞赛(同步赛) 文章目录 前言 正文 A.考试周破防 B.咖啡店 C.kiki和bob玩取石子 D.猴王kiki分桃 E.很二的拆分 F.构造字符串 G.信号 ...

  4. 哈尔滨理工大学21级新生程序设计竞赛(同步赛)错题笔记

    目录: 新生赛题目链接 C kiki和bob玩取石子 E 很二的拆分 F 构造字符串 G 信号之旅 H 小球滚动 I kiki看球赛 J 跳一跳 K Jay的小迷弟 L 翻转卡片 新生赛题目链接 C ...

  5. 浙江中医药大学2018级新生程序设计竞赛题解

    [...] 网上代码比较多我就尽量不挂了,简单讲下思路吧. oj : acm.zcmu.edu.cn [Problem A: 画正方形] 签到题,注意下输出格式(组与组之间有且仅有一个空行)就行. 至 ...

  6. 21级爪哇程序设计新生赛(二)题解

    21级爪哇程序设计新生赛(二) 序 A 小爪的数字集合(并查集) B 小爪的得分(博弈) C 小爪的博弈(博弈) D ljc和cyj玩五子棋(模拟) E ljc和雪球(模拟) F LJC的背包(动态规 ...

  7. 【比赛回顾】2020广工文远知行杯新生程序设计竞赛(初赛)

    [比赛回顾]2020广工文远知行杯新生程序设计竞赛(初赛) 写在前面: 已经更新完除E和F以外的题解(因为这两道我没有时间做了,以后抽空做完后补充).可能我的题解并不是最优的,欢迎交流和讨论~ 文章目 ...

  8. 广东工业大学文远知行杯新生程序设计竞赛(重现赛)复习

    广东工业大学文远知行杯新生程序设计竞赛(重现赛) 1,F,亚子和燐子的game 思路: 我们可以维护一个堆(里面的数都相等,其实就是一个数),每扔进去一个数,就继续维持堆中数字相等(维持方法,就是谁大 ...

  9. 2020年广东工业大学第十届文远知行杯新生程序设计竞赛(同步赛)G.排解忧伤

    2020年广东工业大学第十届文远知行杯新生程序设计竞赛(同步赛)G.排解忧伤 题目链接 题目描述 猪猪参加小米赞助的icpc比赛之后惨遭打铁,为了排解忧伤,他开始观察嘉宾席. 嘉宾席是间隔为1,一字排 ...

最新文章

  1. java进度条字体颜色_java – Nimbus LF – 改变进度条的背景颜色
  2. 一般项目中是如何调bug的 ------- 手把手带你体验整个流程
  3. boost::histogram::algorithm::reduce用法的测试程序
  4. 小于n与n互质的所有数的和(欧拉函数+快速幂)
  5. 《数据库原理与应用》(第三版)第15章 备份和恢复数据库 基础 习题参考答案
  6. TechEd2007现场侧记:TechEd的变与不变
  7. Orace用户创建及权限分配
  8. mysql负载均衡分区_分区和负载均衡让MySQL更大更好
  9. 习题3.5 求链表的倒数第m个元素 (20 分)
  10. python零基础学习书-零基础学习python推荐几本书?
  11. 6.1(数学:五角数)
  12. 一款简洁大气的个人主页源码
  13. 我曾做过陈士成,也做过孔乙己,还做过阿Q
  14. Java零基础学习-API每日单词(日更)
  15. 句法分析 依存句法分析
  16. 微信云控的大触来一下
  17. 视频封装格式篇--MP4
  18. MATLAB绘制二元函数图像
  19. [论文笔记] Sigcomm 2018 Elastic Sketch: Adaptive and Fast Network-wide Measurements
  20. 04_从啤酒与尿布,聊关联规则推荐

热门文章

  1. 程序员每天累成狗,是为了什么?
  2. 图像标注工具-LabelImg
  3. Android仿头条频道管理
  4. ide怎么设置方法中间加一道横线_word文档编辑:如何快速设置批量脚注?
  5. 光学efl_EFL投影式光固化生物3D打印四大亮点
  6. 让阿宅不再寂寞的聊天机器人
  7. 安卓模拟器介绍及其快速启动的解决方案
  8. 报错:[plugin:vite:import-analysis] Failed to resolve import “./Child“ from “src\views\home.vue“. Doe
  9. MySql 不存在则插入,存在则更新或忽略
  10. windows7 default桌面,winlogon桌面和screensaver桌面的截屏