【链接】http://acm.hdu.edu.cn/showproblem.php?pid=6165


【题意】


一张有向图,n个点,m条边,保证没有重边和自环。询问任意两个点能否满足任何一方能够到达另外一方。

【题解】


用Tarjan算法,先把有向图的强连通分量缩成一个点,缩完点之后,剩下的就是一张有向无环图了.
对其进行拓扑排序.一定要唯一的拓扑排序才能够满足题目的要求.
也即,为一条链的时候.
一旦某个时刻做拓扑排序的队列大小大于1就输出无解

【错的次数】


0

【反思】


在这了写反思

【代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define ri(x) scanf("%d",&x)
#define rl(x) scanf("%lld",&x)
#define rs(x) scanf("%s",x)
#define oi(x) printf("%d",x)
#define ol(x) printf("%lld",x)
#define oc putchar(' ')
#define os(x) printf(x)
#define all(x) x.begin(),x.end()
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1e3; vector <int> G[N+10],g[N+10];
int n,m,tot = 0,top = 0,dfn[N+10],low[N+10],z[N+10],totn,du[N+10],in[N+10];
int bh[N+10];
queue <int> dl; void dfs(int x){
    dfn[x] = low[x] = ++ tot;
    z[++top] = x;
    in[x] = 1;
    int len = G[x].size();
    rep1(i,0,len-1){
        int y = G[x][i];
        if (!dfn[y]){
            dfs(y);
            low[x] = min(low[x],low[y]);
        }else
        if (in[y] && dfn[y]<low[x]){
            low[x] = dfn[y];
        }
    }
    if (low[x]==dfn[x]){
        int v = 0;
        totn++;
        while (v!=x){
            v = z[top];
            in[v] = 0;
            bh[v] = totn;
            top--;
        }
    }
} bool ju(){
    return ((int) dl.size()) > 1;
} bool ok(){
    while (!dl.empty()) dl.pop();
    rep1(i,1,n)
        if (du[i]==0)
            dl.push(i);
    while (!dl.empty()){
        if (ju()) return false;
        int x = dl.front();
        dl.pop();
        int len = g[x].size();
        rep1(i,0,len-1){
            int y = g[x][i];
            du[y]--;
            if (du[y]==0){
                dl.push(y);
            }
        }
    }
    return true;
} int main(){
    //Open();
    //Close();
    int T;
    ri(T);
    while (T--){
        ms(dfn,0);
        ms(du,0);
        ms(in,0);
        tot = 0,totn = 0;
        ri(n),ri(m);
        rep1(i,1,n) G[i].clear(),g[i].clear();
        rep1(i,1,m){
            int x,y;
            ri(x),ri(y);
            G[x].pb(y);
        }         rep1(i,1,n)
            if (dfn[i]==0)
                dfs(i);         rep1(i,1,n){
            int len = G[i].size();
            int xx = bh[i];
            rep1(j,0,len-1){
                int y = G[i][j];
                int yy = bh[y];
                if (xx!=yy){
                    g[xx].pb(yy);
                    du[yy]++;
                }
            }
        }
        n = totn;         if (!ok())
            puts("Light my fire!");
        else
            puts("I love you my love and our love save us!");
    }     return 0;
}

【2017 Multi-University Training Contest - Team 9】FFF at Valentine的更多相关文章

  1. 【2017 Multi-University Training Contest - Team 2】TrickGCD

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6053 [Description] 给你一个b数组,让你求一个a数组: 要求,该数组的每一位都小于等 ...

  2. 【2017 Multi-University Training Contest - Team 2】Maximum Sequence

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6047 [Description] 给你一个数列a和一个数列b; 只告诉你a的前n项各是什么; 然后 ...

  3. 【2017 Multi-University Training Contest - Team 2】 Regular polygon

    [Link]: [Description] 给你n个点整数点; 问你这n个点,能够组成多少个正多边形 [Solution] 整点只能构成正四边形. 则先把所有的边预处理出来; 枚举每某两条边为对角线的 ...

  4. 【2017 Multi-University Training Contest - Team 2】 Is Derek lying?

    [Link]: [Description] 两个人都做了完全一样的n道选择题,每道题都只有'A','B','C' 三个选项,,每道题答对的话得1分,答错不得分也不扣分,告诉你两个人全部n道题各自选的是 ...

  5. 【2017 Multi-University Training Contest - Team 5】Rikka with Competition

    [Link]: [Description] [Solution] 把所有人的能力从大到小排; 能力最大的肯定可能拿冠军; 然后一个一个地往后扫描; 一旦出现a[i-1]-a[i]>k; 则说明从 ...

  6. 【2017 Multi-University Training Contest - Team 5】Rikka with Subset

    [Link]: [Description] 给你a数组的n个数的所有2^n个子集的2^n个子集元素的和; 子集元素的和最大为m; 告诉你各个子集元素的和出现的次数; 如 1 2 则0出现1次,1出现1 ...

  7. 【2017 Multi-University Training Contest - Team 5】Rikka with Graph

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6090 [Description] 给你n个点; 让你在这n个点上最多连m条无向边; 使得 ∑ni= ...

  8. 【2017 Multi-University Training Contest - Team 4】Time To Get Up

    [Link]: [Description] [Solution] 把每个数字长什么样存到数组里就好;傻逼题. (直接输入每一行是什么样子更快,不要一个字符一个字符地输入) [NumberOf WA] ...

  9. 【2017 Multi-University Training Contest - Team 4】Counting Divisors

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6069 [Description] 定义d(i)为数字i的因子个数; 求∑rld(ik) 其中l,r ...

随机推荐

  1. export和source的区别

    1.执行脚本是在一个子shell环境运行的,脚本执行完后该子shell自动退出. 2.执行脚本中的系统环境变量(用export定义的变量)才会被复制到子shell中. 3.一个shell中的系统环境变 ...

  2. Gym - 100338E Numbers 贪心

    Gym - 100338E 题意:给你n,k问在1-n中能整出k的字典序最小的数.范围1018 思路:比较简单的贪心了,枚举10的幂m,然后加上k-m%k, 更新答案就可以了,数据一定要用unsign ...

  3. Hue的三大特点、三大功能和架构

    不多说,直接上干货! Hue 是 Cloudera 的大数据 Web 工具 官方访问网站 : http://gethue.com/ GitHub : https://github.com/cloude ...

  4. HIVE JOIN_1

    HIVE JOIN 概述 Hive join的实现包含了: Common (Reduce-side) Join Broadcast (Map-side) Join Bucket Map Join So ...

  5. 解决电信或网通的DNS劫持

    大家有没有碰到访问一些不存在域名或者网站时,浏览器本应显示一个网址不存在之类的信息,但是因为现在很多ISP做了DNS劫持将不存在的域名或网址重定向到ISP的广告页面,烦人的狠.其实tomato可以解决 ...

  6. python yield学习

    yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器). 如果一个函数包 ...

  7. pythong中的全局变量的调用和嵌套函数中变量的使用

    全局变量调用:想要在自定义的函数中使用全局变量,就得要在函数用关键字global声明,然后就可以对全局变量进行修改.嵌套函数中的变量的调用:要在嵌套的变量中,使用nonlocal的声明'''num = ...

  8. 学习推荐《精通Python网络爬虫:核心技术、框架与项目实战》中文PDF+源代码

    随着大数据时代的到来,我们经常需要在海量数据的互联网环境中搜集一些特定的数据并对其进行分析,我们可以使用网络爬虫对这些特定的数据进行爬取,并对一些无关的数据进行过滤,将目标数据筛选出来.对特定的数据进 ...

  9. HDU4596 Yet another end of the world 扩展欧几里德性质

    这题坑了,我真该吃翔啊,竟然一開始方程设错了并且没有去想连列的问题,我真是坑货,做不出就该又一次理一下嘛.操蛋. 题意:给了N组x,y,z然后 问你是否存在两个或者两个以上的id,是的 id%x的值在 ...

  10. 56.如何清除已经设置的npm config配置

    npm config delete registry npm config delete disturl 或者 npm config edit 找到淘宝那两行,删除