题意

给定$n$个点$m$条边有向图及边权$w$,第$i$次经过一条边边权为$w-1-2.-..-i$,$w\ge 0$给定起点$s$问从起点出发最多能够得到权和,某条边可重复经过


有向图能够重复经过的边当且仅当成环,所以tarjan缩点成DAG,缩点后每个点内的权值可以通过二分算出,假设最大的$n$使得$w-\frac{n(n+1)}{2}\ge 0$,那么该点值为$(n+1)w-\frac{n(n+1)(n+2)}{6}$,通过对DAG进行dp算出最长路就是答案

代码

#include <bits/stdc++.h>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long LL;
const int N = 1000005;
int n, m, x, y, w, s;
int head[N], nxt[N], to[N], val[N], cnt;
inline void init(){memset(head, -1, sizeof(head)); cnt = 0;}
inline void add(int u, int v, int w) {to[cnt] = v, val[cnt] = w, nxt[cnt] = head[u], head[u] = cnt++;}
int head2[N], nxt2[N], to2[N], cnt2; LL val2[N];
inline void init2() {memset(head2, -1, sizeof(head)); cnt2 = 0;}
inline void add2(int u, int v, LL w) {to2[cnt2] = v, val2[cnt2] = w, nxt2[cnt2] = head2[u], head2[u] = cnt2++;}
int dfs_ind = 1, dfn[N], low[N], sccno[N], scc_cnt = 0;
LL w_[N];
stack<int> st;
void tarjan(int u) {dfn[u] = low[u] = dfs_ind++;st.push(u);for(int i = head[u]; ~i; i = nxt[i]) {int v = to[i];if(!dfn[v]) {tarjan(v); low[u] = min(low[u], low[v]);}else if(!sccno[v]) {low[u] = min(low[u], dfn[v]);}}if(dfn[u] == low[u]) {scc_cnt++;while(1) {int x = st.top(); st.pop();sccno[x] = scc_cnt;if(x == u) break;}}
}
inline LL cal(LL x) {LL n = sqrt(2.0 * x + 0.25) - 0.5;return (n + 1) * x - (n + 1) * (n + 2) * n / 6;
}
void DAG() {memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));memset(sccno,0,sizeof(sccno));memset(w_,0,sizeof(w_));init2();for(int i = 1; i <= n; ++i) if(!dfn[i]) tarjan(i);for(int i = 1; i <= n; ++i) {for(int j = head[i]; ~j; j = nxt[j]) {int v = to[j];if(sccno[i] != sccno[v]) {add2(sccno[i], sccno[v], 1LL * val[j]);}else w_[sccno[i]] += cal(val[j]);}}
}
LL dp[N];
void dfs(int u) {if(~dp[u]) return;dp[u] = w_[u];for(int i = head2[u]; ~i; i = nxt2[i]) {dfs(to2[i]);dp[u] = max(dp[u], w_[u] + dp[to2[i]] + val2[i]);}
}
int main() {init();scanf("%d%d", &n, &m);for(int i = 1; i <= m; ++i) {scanf("%d%d%d", &x, &y, &w);add(x, y, w);}scanf("%d", &s);DAG();memset(dp, -1, sizeof(dp));dfs(sccno[s]);cout << dp[sccno[s]] << endl;return 0;
}

转载于:https://www.cnblogs.com/ogiso-setsuna/p/7930209.html

【Codeforces】894E.Ralph and Mushrooms Tarjan缩点+DP相关推荐

  1. CodeForces - 894E Ralph and Mushrooms (强连通缩点+dp)

    题意:一张有向图,每条边上都有wi个蘑菇,第i次经过这条边能够采到w-(i-1)*i/2个蘑菇,直到它为0.问最多能在这张图上采多少个蘑菇. 分析:在一个强连通分量内,边可以无限次地走直到该连通块内蘑 ...

  2. BZOJ 2427: [HAOI2010]软件安装 Tarjan缩点 + DP

    Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1628 Solved: 635 Description 现在我们的手头有N个软件,对于一个软件i,它要 ...

  3. tarjan缩点与割点

    Tarjan算法 先是废话时间:说来挺惭愧 , 好几个月以前就学过tarjan算法然而现在才第一次写 模板题:[luogu P3387][模板]缩点 tarjan缩点&dp 为啥要缩点答案显然 ...

  4. BZOJ 1051 受欢迎的牛(Tarjan缩点)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4573  Solved: 2428 [Submit][S ...

  5. 【图论】Tarjan 缩点

    [Tarjan]缩点 在一个点N数据极大的图中,直接SPFA或者记忆花搜索时间超限,那么我们可以利用Tarjan缩点来减少N. 举个例子: 如上图:3,6两点为该图中的强连通分量,我们可以将它们看做一 ...

  6. bzoj1051 [HAOI2006]受欢迎的牛 tarjan缩点

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢"是可以传递的--如果A喜 欢B,B喜 ...

  7. 洛谷P4742(tarjan缩点+拓扑DP)

    https://www.luogu.org/problemnew/show/P4742 题目背景 [Night - 20:02[Night−20:02 P.M.]P.M.] 夜空真美啊--但是--快要 ...

  8. 【计蒜客 - 程序设计竞赛】商业信息共享(Tarjan缩点)

    题干: 商业信息共享 有 N 个公司,从每个公司都能单向地向另外一个公司分享最新商业信息,因为他们之间有着某种合作,你需要解决两个问题: 现在有一个最新的商业信息,至少需要告诉多少个公司,使得所有的公 ...

  9. 【POJ - 2186】Popular Cows (Tarjan缩点)

    题干: Every cow's dream is to become the most popular cow in the herd. In a herd of N (1 <= N <= ...

最新文章

  1. java强引用弱引用_Java 的强引用、弱引用、软引用、虚引用
  2. UA OPTI512R 傅立叶光学导论8 多元脉冲函数
  3. 知识工程学:一个新的重要研究领域
  4. C语言 ungetc将变量存放的字符返回给stdin输入流
  5. 内存的使用和优化的注意事项
  6. 开源.Net Standard版华为物联网北向接口SDK
  7. 交换机用光纤模块互连一端灯不亮或两端都不亮,如何处理?
  8. 构建官方CoreOS COSA 镜像并构建 CoreOS
  9. 利用后退按钮进行重复提交的解决办法。
  10. Xshell远程连接Linux失败
  11. 【PyCharm 使用指南】之汉化插件(官方提供)
  12. 修改jsp文件刷新网页没有更新
  13. HTTP请求协议格式详解
  14. 海康门禁-开,关,常开,常关,授权,清权
  15. Scratch(六):Scratch小游戏之水果连连看
  16. Java 判断输入的是否为元音字母
  17. oracle10G 异构方式迁移表空间之一
  18. 你为什么必须(从现在开始就)掌握linux
  19. ctfshow 萌xin赛
  20. 无标度网络/幂律分布、小世界网络

热门文章

  1. 借给朋友两万块钱,已经两年,每次要钱都各种借口,我该怎么办?
  2. 彩礼钱你是留给爸妈还是自己带走?
  3. 为什么赚不到90后00后的钱?
  4. 失业几个月找不到工作是一种怎样的体验?
  5. 生意倒闭的老板基本死于这两个思维
  6. MyBatis使用log4j输出日志
  7. 4.3一个“简陋”的打字程序
  8. timerfd_create Function not implemented问题
  9. hexbin_Power BI Desktop中的Hexbin散点图
  10. sql azure 语法_在Azure Data Studio中计划SQL笔记本