首页 > 其他分享 >P3387 【模板】缩点

P3387 【模板】缩点

时间:2022-10-09 19:57:19浏览次数:84  
标签:缩点 idx int dp ++ P3387 vis low 模板

P3387

我的做法就是将原图缩点,得到一个DAG新图,在新图上进行DP求最长路径。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 1e5 + 10;
 4 int n, m, t;
 5 int dfn[N], low[N], a[N];
 6 int tot, head[N], to[N], nxt[N];
 7 void add(int x, int y) {
 8     nxt[++ tot] = head[x]; head[x] = tot, to[tot] = y;
 9 }
10 int st[N], top, bel[N], vis[N];
11 int idx, num[N], cnt[N];
12 void tarjan(int x) {
13     dfn[x] = low[x] = ++ t;
14     st[++ top] = x, vis[x] = 1;
15     for (int i = head[x]; i; i = nxt[i]) {
16         int y = to[i];
17         if (!dfn[y]) {
18             tarjan(y);
19             low[x] = min(low[x], low[y]);
20         }
21         else if (vis[y]) 
22             low[x] = min(low[x], dfn[y]);
23     }
24     if(low[x] == dfn[x]) {
25         idx ++;
26         int v;
27         do {
28             v = st[top --];
29             cnt[idx] ++;
30             num[idx] += a[v];
31             bel[v] = idx;
32             vis[v] = 0;    
33         } while (v != x);
34     }
35 }
36 vector<int> e[N];
37 int dp[N];
38 void dfs(int u, int fa) {
39     if (vis[u]) return ;
40     vis[u] = 1;
41     dp[u] = num[u];
42     for (int i = 0; i < e[u].size(); i ++) {
43         int v = e[u][i];
44         if (v == fa) continue;
45         dfs(v, u);
46         dp[u] = max(dp[u], num[u] + dp[v]);
47     }
48 }
49 int main() {
50     scanf("%d %d", &n, &m);
51     for (int i = 1; i <= n; i ++) scanf("%d", &a[i]);
52     for (int i = 1; i <= m; i ++) {
53         int u, v; scanf("%d %d", &u, &v);
54         add(u, v);
55     }    
56     for (int i = 1; i <= n; i ++) 
57         if (!dfn[i]) tarjan(i);
58     for (int i = 1; i <= n; i ++) {
59         for (int j = head[i]; j; j = nxt[j]) {
60             int v = to[j];
61             if (bel[i] != bel[v]) e[bel[i]].push_back(bel[v]);
62         }
63     }
64     memset(vis, 0, sizeof vis);
65     for (int i = 1; i <= idx; i ++) {
66         if (!vis[i]) dfs(i, 0);
67     }
68     int ans = 0;
69     for (int i = 1; i <= idx; i ++) ans = max(ans, dp[i]);
70     printf("%d\n", ans);
71     return 0;
72 }

 

标签:缩点,idx,int,dp,++,P3387,vis,low,模板
From: https://www.cnblogs.com/YHxo/p/16773437.html

相关文章

  • Vue2.0后台项目模板
    后台项目项目模板1.简洁版:https://github.com/PanjiaChen/vue-admin-template2.完整版:https://github.com/PanjiaChen/vue-element-admin下载依赖cnpminstallcnpmi......
  • LOJ#162 【模板】光速幂
    题意这可能也是一道模板题。给出正整数\(x\)和\(n\)个正整数\(a_i\),求\(x^{a_i}\bmodp\)。对于\(100\%\)的数据,\(1\leqn\leq5\times10^6,1\leqx,a_i<p,p=......
  • 差分约束模板补坑与学习
    很久以前就学了差分约束,但是一直没搞懂,也懒得搞懂。今天看板子,脑补了几秒钟突然就懂了。对于一个不等式,\(x_i-x_j\lek\),可以变形:\(x_i\lex_j+k\)。这跟最短......
  • P3388 【模板】割点(割顶)
    【模板】割点(割顶)题目背景割点题目描述给出一个\(n\)个点,\(m\)条边的无向图,求图的割点。输入格式第一行输入两个正整数\(n,m\)。下面\(m\)行每行输入两个正整......
  • 模板引擎
    1、模板引擎的步骤1.1语法通过{{}}进行变量的输出:三元、对象属性、数组、表达式等点击查看代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UT......
  • idea -- mybaties -- 模板下载
    1,ctroller-->如下@GetMapping(value="/createTlzExcel")publicStringcreateTlzExcel(HttpServletResponseresponse)throwsException{Map<String,Object>exc......
  • vue-2 模板语法
    router/index.js//1、引入基础依赖importVuefrom'vue'importRouterfrom'vue-router'//2、引入要路由的页面importSmartyfrom"../components/smarty"//3、......
  • Luogu P3389【模板】高斯消元法
    题意给定一个线性方程组,对其求解。$1\leqn\leq100,\left|a_i\right|\leq{10}^4,\left|b\right|\leq{10}^4$题解因为之前贺题解的时候没有理解高斯-约......
  • 29 自定义模板功能
    在相应的app文件夹中,创建templatetags文件夹,必须是templatetags文件夹命名:注意:templatetags文件夹中必须要有__init__.py文件jd.py:fromdjangoimporttemplateregist......
  • DW个人网站制作成品 简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码
    ......