UVA - 11175 From D to E and Back(思路)

Posted sykline

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA - 11175 From D to E and Back(思路)相关的知识,希望对你有一定的参考价值。

题目:

技术图片

 

 

思路:

如图E:图中a、b、c、d是有向图D中的顶点,如果ac、bc都指向cd,而ac又指向ce,那bc同样应该有一条指向ce的边不然就不能从图D转换来。所以直接枚举顶点就可以了。

技术图片

代码:

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define MAX 1e3
#define FRE() freopen("in.txt","r",stdin)
#define FRO() freopen("out.txt","w",stdout)
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int maxn = 310;
int mp[maxn][maxn];
int m,k;

bool judge() {
    for(int i=0; i<m; i++) {
        for(int j=0; j<m; j++) {
            if(i==j) continue;
            bool ok=true,ook=true;
            for(int p=0; p<m; p++) {
                if(i==p||j==p) continue;
                if(mp[i][p] && !mp[j][p]) {
                    ook = false;
                }
                if(mp[j][p] && !mp[i][p]) {
                    ook = false;
                }
                if(mp[i][p] && mp[j][p]) {
                    ok = false;
                }
            }
            if(!ok&&!ook){
                return false;
            }
        }
    }
    return true;
}

int main() {
    //FRE();
    int kase,st,en;
    scanf("%d",&kase);
    for(int o=1; o<=kase; o++) {
        memset(mp,0,sizeof(mp));
        scanf("%d%d",&m,&k);
        for(int i=0; i<k; i++) {
            scanf("%d%d",&st,&en);
            mp[st][en] = 1;
        }

        if(!judge()) {
            printf("Case #%d: No
",o);
        } else {
            printf("Case #%d: Yes
",o);
        }
    }
    return 0;
}

 

以上是关于UVA - 11175 From D to E and Back(思路)的主要内容,如果未能解决你的问题,请参考以下文章

11175-From D to E and Back(思维)

UVA - 12661 Funny Car Racing (Dijkstra算法)

So you want to be a 2n-aire? UVA - 10900(概率)

UVA10317- Equating Equations(回溯+剪枝)

UVa 247 电话圈(Floyd传递闭包)

Uva矩阵链乘