hdu6165 FFF at Valentine 强联通缩点
来源:互联网 发布:misumi软件 编辑:程序博客网 时间:2024/06/10 05:04
https://vjudge.net/contest/181274#problem/E
自己不集中精力。debug到想哭。。而且一些反例没有想好。。比如
只能参考http://blog.csdn.net/Richie_ll/article/details/77488066
当然还有别的判断方法。。比如看能不能一条路径走完全部点。。
而且暴力的话也是可以的。。用bfs
stack<int>S;int cost[N];int uu[N<<1],fst[N],to[N<<1],nxt[N<<1],dfs_clock;int low[N],pre[N],e;int sccno[N];int scc_cnt;int in[N],out[N];int n,m;inline void add(int u,int v,int c){ uu[e]=u;cost[e]=c;to[e]=v;nxt[e]=fst[u];fst[u]=e++;}void dfs(int u){ low[u]=pre[u]=++dfs_clock; S.push(u); for(int i=fst[u];~i;i=nxt[i]){ int v=to[i]; if(!pre[v]){ dfs(v); low[u]=min(low[v],low[u]); } else if(!sccno[v]){ low[u]=min(low[u],pre[v]); } } if(pre[u]==low[u]){ scc_cnt++; while(1){ int x=S.top();S.pop(); sccno[x]=scc_cnt; if(x==u)break; } }}int vis[N];bool solve(){ int num=0; int num1=0; int tmp=0; mem(vis,0); for(int i=1;i<=scc_cnt;++i){ if(out[i]==0)num++; if(in[i]==0)num1++,tmp=i; } if(num>=2||num1>=2)return false; queue<int>q; for(int i=1;i<=scc_cnt;++i){ if(in[i]==0){in[i]--;q.push(i);} } int flag=1; while(!q.empty()){ int x=q.front();q.pop(); flag--; for(int i=fst[x];~i;i=nxt[i]){ if(cost[i]==0)continue; int v=to[i]; in[v]--; if(in[v]==0){ flag++; in[v]--; q.push(v); } if(flag>=2)return false; } } return true;}int main(){ int T;sf("%d",&T); while(T--){ mem(fst,-1);e=0;scc_cnt=0; mem(vis,0);mem(sccno,0);dfs_clock=0; mem(out,0);mem(in,0);mem(cost,0);mem(pre,0);mem(low,0); sf("%d%d",&n,&m); rep(i,1,m){ int u,v;sf("%d%d",&u,&v); add(u,v,0); } for(int i=1;i<=n;++i){ if(!pre[i])dfs(i); } int cnt=0; int tmp=e; for(int i=0;i<tmp;++i){ int u=uu[i],v=to[i]; if(sccno[u]!=sccno[v]){ add(sccno[u],sccno[v],1); out[sccno[u]]++;in[sccno[v]]++; } } if(!solve())puts("Light my fire!"); else puts("I love you my love and our love save us!"); }}
阅读全文
0 0
- hdu6165 FFF at Valentine【强联通缩点+拓扑排序】
- hdu6165 FFF at Valentine 强联通缩点
- hdu6165 FFF at Valentine 强联通分量+拓扑排序
- HDU6165-FFF at Valentine
- HDU6165-FFF at Valentine
- HDU --- 6165 FFF at Valentine 多校第九场 【强联通缩点 + 维护拓扑序】
- HDU6165 FFF at Valentine【BFS】
- HDU6165 FFF at Valentine(爆搜)
- HDU6165 FFF at Valentine(并查集+tarjan缩点+拓扑排序)
- HDU 6165 FFF at Valentine (tarjan缩点+拓扑判任意两点联通)
- HDU 6165 FFF at Valentine(强连通缩点)
- hdu 6165 FFF at Valentine(强连通分量缩点+dfs)
- 文章标题 HDU 6165: FFF at Valentine(强连通分量缩点)
- hdu 6165 FFF at Valentine(强连通分量缩点+拓扑排序)
- HDU 6165 FFF at Valentine(强连通 缩点 17多校第九场)
- hdu 6165 FFF at Valentine(强连通分量缩点+拓扑排序)
- hdu 6165 FFF at Valentine (数学思想 || 缩点)
- hdu 6165 FFF at Valentine(tarjan缩点+拓扑排序)
- 微信小程序多层嵌套循环,二级数组遍历
- LeetCode 152. Maximum Product Subarray--连续子数组最大乘积
- 关于NSTimer的简单应用
- Mac 随机抽取文件N行数据
- 微信H5支付
- hdu6165 FFF at Valentine 强联通缩点
- 阿里云apache 搭建https
- 为nginx反向代理设置自定义错误页面
- Git命令说明
- 高敏SEO顾问,SEO网络优化如何稳定关键词排名首页
- 直播点赞动画实现
- 欢迎使用CSDN-markdown编辑器
- Mysql 根据时间戳按年月日分组统计
- ORACLE数据库事务隔离级别