码迷,mamicode.com
首页 > 其他好文 > 详细

P2017 [USACO09DEC]晕牛Dizzy Cows

时间:2018-10-15 23:22:06      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:添加   oid   不可   getch   题意   getchar   cow   top   where   

图论日常不会系列。。。

题意:给定有向边和无向边,然后给每一条无向边定向,使得到的图无环。

我本来想缩一下点的,但是越想越晕。

然后就翻了题解,恍然大悟。。。

其实只需要给只有有向边的图跑一次toposort。然后把无向边的定向看做是在添加有向边。

显然不要违反拓扑序来添加有向边,这个图就不可能有环!

所以随便搞一搞就好了。。。

代码:

#include<cstdio>

#include<queue>
const int maxn = 100005;
struct Edges
{
    int next, to;
} e[maxn * 3];
int head[maxn], tot;
int indegree[maxn];
int topo[maxn], ttot;
int where[maxn];
struct Query
{
    int u, v;
} Q[maxn];
int n, m1, m2;
int read()
{
    int ans = 0, s = 1;
    char ch = getchar();
    while(ch > ‘9‘ || ch < ‘0‘){ if(ch == ‘-‘) s = -1; ch = getchar(); }
    while(ch >= ‘0‘ && ch <= ‘9‘) ans = (ans << 3) + (ans << 1) + ch - ‘0‘, ch = getchar();
    return s * ans;
}
void link(int u, int v)
{
    e[++tot] = (Edges){head[u], v};
    head[u] = tot;
}
void toposort()
{
    std::queue<int> q;
    for(int i = 1; i <= n; i++) if(indegree[i] == 0) q.push(i);
    while(!q.empty())
    {
        int u = q.front(); q.pop();
        topo[++ttot] = u;
        for(int i = head[u]; i; i = e[i].next)
        {
            int v = e[i].to;
            indegree[v]--;
            if(indegree[v] == 0)
            {
                q.push(v);
            }
        }
    }
}
int main()
{
    n = read(), m1 = read(), m2 = read();
    while(m1--)
    {
        int u = read(), v = read();
        link(u, v);
        indegree[v]++;
    }
    for(int i = 1; i <= m2; i++)
    {
        Q[i].u = read(), Q[i].v = read();
        
    }
    toposort();
    for(int i = 1; i <= ttot; i++) where[topo[i]] = i;
    for(int i = 1; i <= m2; i++)
    {
        int temp1 = where[Q[i].u], temp2 = where[Q[i].v];
        if(temp1 < temp2) printf("%d %d\n", Q[i].u, Q[i].v);
        else printf("%d %d\n", Q[i].v, Q[i].u);
    }
    return 0;
}

P2017 [USACO09DEC]晕牛Dizzy Cows

标签:添加   oid   不可   getch   题意   getchar   cow   top   where   

原文地址:https://www.cnblogs.com/Garen-Wang/p/9794956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!