http://acm.sgu.ru/problem.php?contest=0&problem=219

题目大意:

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

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

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

现在求所有点是否可存活

思路:

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

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

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

注意:

1. 有自环

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

会有这种情况不正确

#include  <cstdio>
#include <stack>
#include <cstring>
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<int> 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<m;i++){
int f,t,c;
scanf("%d%d%d",&f,&t,&c);
addedge(f,t,c,i);
} for(int i=1;i<=n;i++){
if(dp[i]==0){
tarjian(i);
}
} for(int i=1;i<=n;i++){
if(alive[i]==0){
dfs(i);
}
} for(int i=1;i<=n;i++){
printf("%d\n",alive[i]);
} return 0;
}

  

SGU 219 Synchrograph tarjian找环,理解题意,图论 难度:3的更多相关文章

  1. 【CodeForces】915 D. Almost Acyclic Graph 拓扑排序找环

    [题目]D. Almost Acyclic Graph [题意]给定n个点的有向图(无重边),问能否删除一条边使得全图无环.n<=500,m<=10^5. [算法]拓扑排序 [题解]找到一 ...

  2. Codeforces Round #369 (Div. 2) D. Directed Roads —— DFS找环 + 快速幂

    题目链接:http://codeforces.com/problemset/problem/711/D D. Directed Roads time limit per test 2 seconds ...

  3. # 「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程)

    「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程) 题链 题意:n条边n个节点的连通图,边权为两个节点的权值之和,没有「自环」或「重边」,给出的图中有且只有一个包括奇数个结点的环 ...

  4. [图中找环] Codeforces 659E New Reform

    New Reform time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  5. [hdu5348]图上找环,删环

    http://acm.hdu.edu.cn/showproblem.php?pid=5348 题意:给一个无向图,现在要将其变成有向图,使得每一个顶点的|出度-入度|<=1 思路:分为两步,(1 ...

  6. zstu.4191: 无向图找环(dfs树 + 邻接表)

    4191: 无向图找环 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 117  Solved: 34 Description 给你一副无向图,每条边有 ...

  7. Mouse Hunt CodeForces - 1027D(思维 找环)

    Medicine faculty of Berland State University has just finished their admission campaign. As usual, a ...

  8. HDU - 6370 Werewolf 2018 Multi-University Training Contest 6 (DFS找环)

    求确定身份的人的个数. 只能确定狼的身份,因为只能找到谁说了谎.但一个人是否是民,无法确定. 将人视作点,指认关系视作边,有狼边和民边两种边. 确定狼的方法只有两种: 1. 在一个仅由一条狼边组成的环 ...

  9. Codeforces Beta Round #88 C. Cycle —— DFS(找环)

    题目链接:http://codeforces.com/problemset/problem/117/C C. Cycle time limit per test 2.5 seconds memory ...

随机推荐

  1. UVA796 - Critical Links(Tarjan求桥)

    In a computer network a link L, which interconnects two servers, is considered critical if there are ...

  2. 洛谷P5151 HKE与他的小朋友 快速幂/图论+倍增

    正解:矩阵快速幂/tarjan+倍增 解题报告: 传送门! 跟着神仙做神仙题系列III 这题首先一看到就会想到快速幂趴?就会jio得,哦也不是很难哦 然而,看下数据范围,,,1×105,,,显然开不下 ...

  3. Flask知识总汇

    Flask基础 Flask基础使用与配置 Flask路由系统与模板系统 Flask视图函数 Flask请求与响应 Flask的session操作 Flask中间件 Flask连接数据库 Flask使用 ...

  4. Navicat连接服务器上的Mysql数据库

  5. mysql 数据操作 多表查询 子查询 带EXISTS关键字的子查询

    带EXISTS关键字的子查询 EXISTS关字键字表示存在. EXISTS 判断某个sql语句的有没有查到结果 有就返回真  true 否则返回假 False 如果条件成立 返回另外一条sql语句的返 ...

  6. 如何使用OpenCart 2.x Event事件系统

    如何使用OpenCart 2.x Event事件系统 OpenCart 2.x 包含很多新特性,其中之一就是专为开发者提供的事件系统,Event System.它允许你在不修改原有系统代码的基础上( ...

  7. 3.12 Templates -- Wrting Helpers(编写辅助器)

    一.概述 1. Helpers允许你向你的模板添加超出在Ember中开箱即用的额外的功能.辅助器是最有用的,用于将来自模型和组件的原始值转换成更适合于用户的格式. 2. 例如,假设我们有一个Invoi ...

  8. cocos-lua基础学习(八)Layer类学习笔记

    创建 local layer = cc.Layer:create() local layer1 = cc.LayerColor:create(cc.c4b(192, 0, 0, 255), s.wid ...

  9. vue-router的hash模式与history模式的对比

    Vue-router 中hash模式和history模式的关系在vue的路由配置中有mode选项 最直观的区别就是在url中 hash 带了一个很丑的 # 而history是没有#的mode:&quo ...

  10. C#——文件上传(一般处理程序ashx)

    Framework版本:.Net Framework 4 1.FileInfo实体 using System; using System.Collections.Generic; using Syst ...