博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SGU 219 Synchrograph tarjian找环,理解题意,图论 难度:3
阅读量:5228 次
发布时间:2019-06-14

本文共 2268 字,大约阅读时间需要 7 分钟。

题目大意:

如果指向某个点的边权全都为正数,那么这个点就是可点燃的,点燃操作把入弧权值-1,出弧权值都+1,

如果在某种点燃序列之后还可以再点燃一些点使得这个点还可以点燃,那么这个点在这种点燃序列之后存活

如果在任何点燃序列之后都还可以再点燃一些点使得这个点还可以点燃,那么这个点可存活

现在求所有点是否可存活

思路:

考虑不可存活的点:对于某个状态,对于不可存活的点,要想使得没有序列可以使它被点燃,那么有边指向它的点里一定有不可存活的点,且这条边权值为0,

如果有一个边权值都为0的环,那么在这条环上,由于权值都为0,所以这个环上的都是不可存活的点.

所以:先通过求边权值都为0的环确定一些初始点,由这些不可存活点出发到达的点,都在某个序列下因为这些不可存活点不能提供权值而不能存活

注意:

1. 有自环

2. tarjian找环需要注意更新dfn值的点在stack内,否则对于我写的形式

会有这种情况不正确

#include  
#include
#include
using namespace std;const int maxn=1e3+3;const int maxm=5e4+4;int n,m;int first[maxn],head[maxn];struct edge{ int t,nxt;}e[maxm],g[maxm];int low[maxn],dp[maxn],depth;int alive[maxn];bool in[maxn];void addedge(int f,int t,int c,int ind){ if(c==0){ g[ind].nxt=head[f]; g[ind].t=t; head[f]=ind; } e[ind].nxt=first[f]; e[ind].t=t; first[f]=ind;}stack
st;void tarjian(int s){ low[s]=dp[s]=++depth; in[s]=true;st.push(s); for(int p=head[s];p!=-1;p=g[p].nxt){ int t=g[p].t; if(t==s){ alive[s]=0; } if(dp[t]==0){ tarjian(t); low[s]=min(low[s],low[t]); } else if(in[t]){//ATTHENTION: low[s]=min(low[s],dp[t]); } } bool single=true; if(low[s]==dp[s]){ while(st.top()!=s){ single=false; alive[st.top()]=0; in[st.top()]=false;st.pop(); } if(!single){ alive[st.top()]=0; } in[st.top()]=false;st.pop(); }}void dfs(int s){ for(int p=first[s];p!=-1;p=e[p].nxt){ int t=e[p].t; if(alive[t]==1){ alive[t]=0; dfs(t); } }}int main(){ scanf("%d%d",&n,&m); memset(first,-1,sizeof(first)); memset(head,-1,sizeof(head)); fill(alive,alive+n+1,1); for(int i=0;i

  

 

转载于:https://www.cnblogs.com/xuesu/p/4297738.html

你可能感兴趣的文章
操作系统(八) 死锁
查看>>
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>
c++||template
查看>>
[BZOJ 5323][Jxoi2018]游戏
查看>>
编程面试的10大算法概念汇总
查看>>
Vue
查看>>
表变量与临时表的优缺点(转)
查看>>
shell脚本图书
查看>>
UNIX环境高级编程——线程限制
查看>>
UNIX网络编程——原始套接字SOCK_RAW
查看>>
TCP发送源码学习(1)--tcp_sendmsg
查看>>
使用两个不同类型的数据进行加法计算时,使用异常处理语句捕获由于数据类型错误而出现的异常,发生生成错误。是否继续并运行上次的成功生成?...
查看>>
python-三级菜单和购物车程序
查看>>
web开发灵感推荐--34个有吸引力的电影网站设计灵感
查看>>
sql操作
查看>>
条件断点 符号断点
查看>>
第二十三模板 18.3.5 位集合
查看>>
LEFT JOIN条件写在where里是不会多查出数据来的
查看>>
手把手 学习Git
查看>>
VMware12 + Ubuntu16.04 虚拟磁盘扩容
查看>>