[POI2006]PRO-Professor Szu
LCVIII.[POI2006]PRO-Professor Szu
我要举报……本题数据与题面不符(事实上我已经举报了……),会有到不了主楼的情形,要特别考虑。
思路很简单,我们跑SCC缩点。假如一个SCC内部有自环,显然可以一直绕自环,故答案是无限;同时,所有可以走到该SCC的其它点答案都是无限。
于是我们反向所有边,从终点开始拓扑排序,传递无限的情形,并进行DP(设表示从节点到终点的路径数量即可)。注意要先把所有从到不了的SCC连出的边删去,同时不应该考虑终点自身。
代码:
#include<bits/stdc++.h>
using namespace std;
const int lim=36500;
int n,m,dfn[1001000],low[1001000],tot,f[1001000],col[1001000],c,in[1001000],res,cnt;
bool inf[1001000];
vector<int>v[1001000],u[1001000];
stack<int>s;
void Tarjan(int x){
dfn[x]=low[x]=++tot,s.push(x);
for(auto y:v[x]){
if(!dfn[y])Tarjan(y),low[x]=min(low[x],low[y]);
else if(!col[y])low[x]=min(low[x],dfn[y]);
}
if(low[x]<dfn[x])return;
c++;
int y;
do y=s.top(),s.pop(),col[y]=c;while(y!=x);
}
queue<int>q;
int main(){
scanf("%d%d",&n,&m),n++;
for(int i=1,x,y;i<=m;i++)scanf("%d%d",&x,&y),v[y].push_back(x);
for(int i=1;i<=n;i++)if(!dfn[i])Tarjan(i);
for(int i=1;i<=n;i++)for(auto j:v[i])if(col[i]!=col[j])u[col[i]].push_back(col[j]),in[col[j]]++;else inf[col[i]]=true;
for(int i=1;i<=c;i++)if(!in[i])q.push(i);
while(!q.empty()){
int x=q.front();q.pop();
if(x==col[n])continue;
inf[x]=f[x]=0;
for(auto y:u[x])if(!--in[y])q.push(y);
}
f[col[n]]=!inf[col[n]],q.push(col[n]);
while(!q.empty()){
int x=q.front();q.pop();
for(auto y:u[x]){
if(!inf[y])f[y]+=f[x],inf[y]|=inf[x];
if(f[y]>lim)f[y]=0,inf[y]=true;
if(!--in[y])q.push(y);
}
}
for(int i=1;i<=c;i++){
if(inf[i])res=lim+1;
else res=max(res,f[i]);
}
if(res>lim){
puts("zawsze");
for(int i=1;i<n;i++)cnt+=inf[col[i]];
printf("%d\n",cnt);
for(int i=1;i<n;i++)if(inf[col[i]])printf("%d ",i);
}else{
printf("%d\n",res);
for(int i=1;i<n;i++)cnt+=(f[col[i]]==res);
printf("%d\n",cnt);
for(int i=1;i<n;i++)if(f[col[i]]==res)printf("%d ",i);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?