• 多比特杯武汉工程大学第六届ACM新生赛(同步赛)D薇尔莉特能拿多少棵碧根果(拓扑)


    题目

    给出n个点和m条有向边

    原图中的边u->v,我们建立方向图即v->u

    其中u的入度++

    在一个拓扑图中我们可以容易的判定是否存在一个圆,即圆中的值可以任意取

    我们把入读为0的边放入队列中,因为是反向图

    我们需要把该点的权值赋给该点指向的目标点

    由于目标点只能从众多指向他的点选一个来加,所以我们要维护一个指向他的点的权值的最大值

    然后做一遍拓扑,如果有点没有经过就说明以该点为起点可以进入一个环中,这是最大值是1e8

    其他情况直接遍历找最大值就行了

    1. #define int long long//__int128 2^127-1(GCC)
    2. #define PII pair
    3. using namespace std;
    4. const int inf = 0x3f3f3f3f3f3f3f3f, N = 2e5 + 5, mod = 1e9 + 7;
    5. vector<int>q[N];//边
    6. int a[N];//每个点权值
    7. int in[N];//入度
    8. bool st[N];//是否被经过
    9. int son[N];//指向该点的所以点中的权值最大值
    10. signed main()
    11. {
    12. ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0);
    13. int n, m;
    14. cin >> n >> m;
    15. int maxx = 0;
    16. for (int i = 1; i <= n; i++) {
    17. cin >> a[i];
    18. maxx = max(maxx, a[i]);
    19. }
    20. while (m--)
    21. {
    22. int u, v;
    23. cin >> u >> v;
    24. q[v].push_back(u);
    25. in[u]++;
    26. }
    27. queue<int>que;
    28. for (int i = 1; i <= n; i++) {
    29. if (in[i] == 0) {
    30. que.push(i);
    31. }
    32. }
    33. while (que.size()) {
    34. int t = que.front();
    35. st[t] = 1;
    36. que.pop();
    37. for (auto w : q[t]) {
    38. son[w] = max(a[t], son[w]);
    39. in[w]--;
    40. if (in[w] == 0) {
    41. a[w] = min((int)1e8, a[w] + son[w]);
    42. maxx = max(maxx, a[w]);
    43. que.push(w);
    44. }
    45. }
    46. }
    47. int cnt = 0;
    48. for (int i = 1; i <= n; i++) {
    49. if (st[i] == 0) {
    50. cnt++;
    51. }
    52. }
    53. if (cnt) {
    54. maxx = (int)1e8;
    55. for (int i = 1; i <= n; i++) {
    56. if (a[i] == maxx) {
    57. cnt++;
    58. }
    59. }
    60. }
    61. else {
    62. for (int i = 1; i <= n; i++) {
    63. if (a[i] == maxx) {
    64. cnt++;
    65. }
    66. }
    67. }
    68. cout << cnt << "\n";
    69. cout << maxx << "\n";
    70. }

  • 相关阅读:
    This dependency was not found: vxe-table/lib/vxe-table in ./src/main.js
    SQL LIKE 运算符
    C++11——lambda表达式
    用欧拉路径判断图同构推出reverse合法性:1116T4
    软件明明通过了各种级别的测试,交付给用户仍会出现问题?
    大二数据结构实验(排序算法)
    vue入门
    【Shell脚本8】Shell printf 命令
    HDFS工作流程和机制
    【os.path】的相关用法(持更)
  • 原文地址:https://blog.csdn.net/m0_74315028/article/details/134277002