• hdu


    Triangle LOVE

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 4610    Accepted Submission(s): 1809

    Problem Description
    Recently, scientists find that there is love between any of two people. For example, between A and B, if A don’t love B, then B must love A, vice versa. And there is no possibility that two people love each other, what a crazy world!
    Now, scientists want to know whether or not there is a “Triangle Love” among N people. “Triangle Love” means that among any three people (A,B and C) , A loves B, B loves C and C loves A.
      Your problem is writing a program to read the relationship among N people firstly, and return whether or not there is a “Triangle Love”.
     
    Input
    The first line contains a single integer t (1 <= t <= 15), the number of test cases.
    For each case, the first line contains one integer N (0 < N <= 2000).
    In the next N lines contain the adjacency matrix A of the relationship (without spaces). Ai,j = 1 means i-th people loves j-th people, otherwise Ai,j = 0.
    It is guaranteed that the given relationship is a tournament, that is, Ai,i= 0, Ai,j ≠ Aj,i(1<=i, j<=n,i≠j).
     
    Output
    For each case, output the case number as shown and then print “Yes”, if there is a “Triangle Love” among these N people, otherwise print “No”.
    Take the sample output for more details.
     
    Sample Input
    2 5 00100 10000 01001 11101 11000 5 01111 00000 01000 01100 01110
     
    Sample Output
    Case #1: Yes Case #2: No
     
    Author
    BJTU
     
    Source

    每次进行3次DFS, 注意标记就可以了。

    #include <map>
    #include <set>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <iostream>
    #include <stack>
    #include <cmath>
    #include <string>
    #include <vector>
    #include <cstdlib>
    //#include <bits/stdc++.h>
    //#define LOACL
    #define space " "
    using namespace std;
    //typedef long long LL;
    //typedef __int64 Int;
    typedef pair<int, int> PAI;
    const int INF = 0x3f3f3f3f;
    const double ESP = 1e-5;
    const double PI = acos(-1.0);
    const int MOD = 1e9 + 7;
    const int MAXN = 2000 + 10;
    char data[MAXN][MAXN];
    bool vis[MAXN];
    int n;
    vector<int> G[MAXN];
    int Init() {
        memset(vis, 0, sizeof(vis));
        for (int i = 0; i < n; i++) G[i].clear();
    }
    bool dfs(int x, int step, int init) {
        if (step == 3 && x == init) return true;
        if (step == 3) return false;
        for (int i = 0; i < G[x].size(); i++) {
            if (vis[G[x][i]]) return false;
            if (dfs(G[x][i], step + 1, init)) return true;
            vis[x] = true;
        }
        return false;
    }
    int main() {
        int T;
        scanf("%d", &T);
        int Kcase = 0;
        while (T--) {
            bool flag = false;
            scanf("%d", &n); Init();
            for (int i = 0; i < n; i++) {
                scanf("%s", data[i]);
            }
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (data[i][j] == '1') G[i].push_back(j);
                }
            }
            for (int i = 0; i < n; i++) {
                if (dfs(i, 0, i)) {flag = true; break;}
            }
            if (flag) printf("Case #%d: Yes
    ", ++Kcase);
            else printf("Case #%d: No
    ", ++Kcase);
        }
        return 0;
    }




  • 相关阅读:
    c# 泛型总结
    透过字节码分析java基本类型数组的内存分配方式。
    c#索引器
    redis在asp.net 中的应用
    Unity3D shaderLab
    Unity3d Asset Store 打不开
    C# 类型转换的开销
    [转]权重算法
    Coroutine的原理以及实现
    在Unity3D里使用WinForm
  • 原文地址:https://www.cnblogs.com/cniwoq/p/6770769.html
Copyright © 2020-2023  润新知