HDU6165 FFF at Valentine【BFS】

来源:互联网 发布:游戏运营数据分析报告 编辑:程序博客网 时间:2024/05/19 04:07

题意:一个有向图,问任意两点间是否存在一条路可到达另一个点(A->B 或 B->A 有一条路即可)


思路:官方题解,缩点为DAG,则如果有两个及以上出度为0的点则有不能走到同一个点的点对,真是巧妙

暴力可破,从每个点开始bfs,发现一对新的关系,就记录下,最后关系有n*(n-1) / 2的话,满足题意


#include<bits/stdc++.h>using namespace std;vector<int> v[1005];int line[1005][1005],vis[1005];int ans;void bfs(int st){    queue<int> q;    while(!q.empty())        q.pop();    q.push(st);    memset(vis,0,sizeof vis);    vis[st] = 1;    while(!q.empty())    {        int x = q.front();q.pop();        for(int i = 0; i < v[x].size(); i++)        {            int y = v[x][i];            if(vis[y] == 0)            {                vis[y] = 1;                q.push(y);                if(line[st][y] == 0)                {                    line[st][y] = line[y][st] = 1;                    ans++;                }            }        }    }}int main(){    int T,n,m;cin>>T;    while(T--)    {        scanf("%d%d",&n,&m);        for(int i=1;i<=n;i++)            v[i].clear();        while(m--)        {            int x,y;            scanf("%d%d",&x,&y);            v[x].push_back(y);        }        memset(line,0,sizeof line);        ans = 0;        for(int i = 1; i <= n; i++)            bfs(i);        if(ans == n*(n-1)/2)            printf("I love you my love and our love save us!\n");        else            printf("Light my fire!\n");    }    return 0;}


原创粉丝点击