【BZOJ】1512 [POI2006]Pro-Professor Szu 强联通分量+拓扑
来源:互联网 发布:奔奔数码 淘宝 编辑:程序博客网 时间:2024/06/05 19:13
题目传送门
以后不管打什么代码,一定要过心,不要因为这份代码打过很多遍就放松警惕:这题我因为读优打错了,WA了5发……心塞.jpg
这题的正解是tarjan+拓扑,题目要求
对于一个主建筑能到达的、节点数大于
剩下的情况直接在原图中找最长路即可,这个可以用拓扑实现。
p.s.对于第二、三问,主建筑不能走到主建筑……呵呵.png
附上AC代码:
#include <cstdio>#include <cctype>#include <algorithm>#include <queue>using namespace std;const int N=1e6+10,inf=36501;struct side{ int to,nt;}s[N],e[N];int n,m,x,y,num,h[N];int sk[N],d[N],t[N],size,top,sum,sy[N],sz[N];int u[N],rd[N],f[N],put[N],len,ans;queue <int> que;bool b[N],bo[N];inline char nc(){ static char ch[100010],*p1=ch,*p2=ch; return p1==p2&&(p2=(p1=ch)+fread(ch,1,100010,stdin),p1==p2)?EOF:*p1++;}inline void read(int &a){ static char c=nc();int f=1; for (;!isdigit(c);c=nc()) if (c=='-') f=-1; for (a=0;isdigit(c);a=a*10+c-'0',c=nc()); return (void)(a*=f);}inline void so(int x){ d[x]=t[x]=++size,b[x]=1,sk[++top]=x; for (int i=h[x]; i; i=s[i].nt) if (!d[s[i].to]) so(s[i].to),t[x]=min(t[x],t[s[i].to]); else if (b[s[i].to]) t[x]=min(t[x],d[s[i].to]); if (d[x]==t[x]){ ++sum; while (1){ int p=sk[top--];b[p]=0,sy[p]=sum; if (p==x) break; } } return;}int main(void){ read(n),read(m),++n; for (int i=1; i<=m; ++i){ read(x),read(y),s[++num]=(side){x,h[y]},h[y]=num; if (x==y) bo[x]=1; } for (int i=1; i<=n; ++i) if (!d[i]) so(i); for (int i=1; i<=n; ++i) ++sz[sy[i]]; num=0; for (int i=1; i<=n; ++i) for (int j=h[i]; j; j=s[j].nt) if (sy[i]!=sy[s[j].to]){ e[++num]=(side){sy[s[j].to],u[sy[i]]},u[sy[i]]=num; ++rd[sy[s[j].to]]; } for (int i=1; i<=n; ++i) if (bo[i]) ++sz[sy[i]]; que.push(sy[n]); if (sz[sy[n]]>1) f[sy[n]]=inf; else f[sy[n]]=1; while (!que.empty()){ int p=que.front();que.pop(); for (int i=u[p]; i; i=e[i].nt){ f[e[i].to]+=f[p]; if (f[e[i].to]>inf||(sz[e[i].to]>1&&f[e[i].to])) f[e[i].to]=inf; if ((--rd[e[i].to])==0) que.push(e[i].to); } } for (int i=1; i<n; ++i) ans=max(ans,f[sy[i]]); printf(ans==inf?"zawsze\n":"%d\n",ans); for (int i=1; i<n; ++i) if (f[sy[i]]==ans) put[++len]=i; printf("%d\n",len); for (int i=1; i<=len; ++i) printf("%d ",put[i]); return 0;}
阅读全文
0 0
- 【BZOJ】1512 [POI2006]Pro-Professor Szu 强联通分量+拓扑
- BZOJ 1512 [POI2006]Pro-Professor Szu Tarjan强连通分量 DP
- BZOJ 1512 [POI2006]Pro-Professor Szu Tarjan缩点+拓扑DP
- bzoj 1512 [POI2006]Pro-Professor Szu tarjan dp
- bzoj1512: [POI2006]Pro-Professor Szu
- bzoj 1051 HAOI2006 受欢迎的牛 强联通分量+拓扑排序
- BZOJ 1093 ZJOI 2007 最大半连通子图 强联通分量+拓扑图DP
- BZOJ 1093 最大半联通子图 强连通分量缩点+拓扑排序dp
- BZOJ 1093 ZJOI 2007 最大半连通子图 强联通分量+拓扑图DP
- hdu6165 FFF at Valentine 强联通分量+拓扑排序
- BZOJ 2438 杀人游戏 强联通分量tarjan缩点
- 【bzoj 1051】 [HAOI2006]受欢迎的牛 强联通分量
- 【BZOJ】1051 [HAOI2006]受欢迎的牛 强联通分量
- 强联通分量
- 强联通分量
- poj2375 强联通分量
- 强联通分量
- poj1904(强联通分量)
- java中的length
- centos6 更新glibc-2.14
- EL表达式 在jsp中或者js中使用注意事项
- Ubuntu安装CUDA报错:/usr/lib/nvidia-375/libEGL.so.1 不是符号连接
- 智力大冲浪(贪心)
- 【BZOJ】1512 [POI2006]Pro-Professor Szu 强联通分量+拓扑
- MAT安装及使用教程
- Servlet 技术简介
- 网页注册登录(三)
- myeclipse控制台报某jar包里某个类找不到,查看该jar包是否引入
- Hadoop实战(3)_虚拟机搭建CDH的全分布模式
- BZOJ 1598 [Usaco 2008 Mar] 启发式搜索 解题报告
- 51nod 1378 夹克老爷的愤怒[贪心][树形dp?]
- 用Hexo搭建个人博客