题文:https://vjudge.net/problem/UVA-11324

题解:

  这个题目首先可以发现,只要是一个强连通分量,要么都选,要么都不选,将点权看成强连通分量的点数,所以这个题目就转化成了DAG上的最大路。

  稍微dp一下就好了。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#include <stack>
#define MAXN 50100
using namespace std;
struct edge{
int first;
int next;
int to;
}a[MAXN*];
int dfn[MAXN],in[MAXN],low[MAXN],fa[MAXN],size[MAXN];
int dp[MAXN],b[MAXN],x[MAXN],y[MAXN];
int n,m,num1=,num2=,num3=;
stack<int> s; void cl(){
memset(low,,sizeof(low));
memset(dp,,sizeof(dp));
memset(dfn,,sizeof(dfn));
memset(fa,,sizeof(fa));
memset(size,,sizeof(size));
memset(a,,sizeof(a));num1=num2=num3=;
memset(in,,sizeof(in));
memset(b,,sizeof(b));
memset(x,,sizeof(x));
memset(y,,sizeof(y));
} void addedge(int from,int to){
a[++num1].to=to;
a[num1].next=a[from].first;
a[from].first=num1;
} void init(){
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
scanf("%d%d",&x[i],&y[i]);
addedge(x[i],y[i]);
}
} void tarjian(int now){
s.push(now);in[now]=;
dfn[now]=low[now]=++num3;
for(int i=a[now].first;i;i=a[i].next){
int to=a[i].to;
if(!dfn[to]){
tarjian(to);
low[now]=min(low[now],low[to]);
}
else if(in[to]) low[now]=min(low[now],dfn[to]);
}
if(low[now]==dfn[now]){
int u=-;
num2++;
while(u!=now){
u=s.top();s.pop();in[u]=;
fa[u]=num2;
size[num2]++;
}
}
} void make(){
memset(a,,sizeof(a));num1=;
for(int i=;i<=m;i++){
if(fa[x[i]]!=fa[y[i]]) addedge(fa[x[i]],fa[y[i]]);
}
} void pre(){
while(!s.empty()) s.pop();
for(int i=;i<=n;i++) if(!dfn[i]) tarjian(i);
make();
} int DP(int now){
if(b[now]) return dp[now];
b[now]=;
dp[now]+=size[now];
for(int i=a[now].first;i;i=a[i].next){
int to=a[i].to;
dp[now]=max(dp[now],size[now]+DP(to));
}
return dp[now];
} int main()
{
int t;cin>>t;
while(t--){
cl();
init();
pre();
for(int i=;i<=n;i++) DP(i);
int ans=;
for(int i=;i<=n;i++) ans=max(ans,dp[i]);
printf("%d\n",ans);
}
return ;
}

最新文章

  1. 史上最详细git教程
  2. angular的$filter服务
  3. Android 短信广播接收相关问题
  4. edgesForExtendedLayout,automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars的影响
  5. Android Fragment初探:静态Fragment组成Activity
  6. ultraedit正则使用
  7. maven setting.xml配置说明
  8. HTTP响应头和请求头信息对照表
  9. C# 使用 AutoResetEvent 或 ManualResetEvent 同步两个线程
  10. 【多线程】Java并发编程:并发容器之CopyOnWriteArrayList(转载)
  11. [转] 使用NVM快速搭建NODE开发环境
  12. 基于网络的服装定制MTM系统研究 - 硕士论文 - 道客巴巴
  13. imagebutton、imageview的属性
  14. Unity-奥义技能背景变黑效果
  15. File attachment or query results size exceeds allowable value of 1000000 bytes.
  16. PIL库的运用
  17. 莫烦theano学习自修第七天【回归结果可视化】
  18. 使用requests进行模拟登陆
  19. Android Developers:向其它应用发送用户
  20. 修改rabbitmq Web UI 监控页面的端口

热门文章

  1. 数论 Day 13
  2. Vert.x学习之 Web Client
  3. Android-WebView支持input file启用相机/选取照片
  4. [Vue 牛刀小试]:第十七章 - 优化 Vue CLI 3 构建的前端项目模板(1)- 基础项目模板介绍
  5. PyTorch在笔记本上实现CUDA加速
  6. Anroid逆向学习从编写so到静动态调试分析arm的一次总结
  7. 浅谈Task的用法
  8. GS-PON数据库分区列范围查询优化案例
  9. JavaScript之时间对象Date
  10. css/js禁止点击元素