zoukankan      html  css  js  c++  java
  • HDU 5961 传递 BFS

    **题意:**中文题,就是判断一个竞赛图拆成两个图,判断是否都传递 **思路:**分别BFS判深度即可,用这种方法注意要进行读入优化。
    /** @Date    : 2016-11-18-20.00
    * @Author : Lweleth (SoungEarlf@gmail.com)
    * @Link : https://github.com/
    * @Version :
    */
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #include <algorithm>
    #include <utility>
    #include <vector>
    #include <map>
    #include <set>
    #include <string>
    #include <stack>
    #include <queue>
    //#include<bits/stdc++.h>
    #define LL long long
    #define pii pair<int ,int>
    #define mp(x,y) make_pair((x), (y))
    #define fi first
    #define se second
    #define MMF(x) memset((x),0,sizeof(x))
    #define MMI(x) memset((x), INF, sizeof(x))
    using namespace std;

    const int INF = 0x3f3f3f3f;
    const int N = 1e5+2000;



    vector<int >ed1[2100], ed2[2100];
    int vis[2100];

    int main()
    {
    int T;
    scanf("%d", &T);
    while(T--)
    {
    int n;
    scanf("%d", &n);

    for(int i = 1; i <= n; i++)
    ed1[i].clear(), ed2[i].clear();

    getchar();
    for(int i = 1; i <= n; i++)
    {
    for(int j = 1; j <= n; j++)
    {
    char t;
    t = getchar();//读入优化
    if(t == 'P')
    ed1[i].push_back(j);
    else if(t =='Q')
    ed2[i].push_back(j);
    }
    getchar();
    }

    int flag = 0;
    for(int i = 1; i <= n; i++)
    {
    queue<int>q;
    q.push(i);
    MMF(vis);
    while(!q.empty())
    {
    int nw = q.front();
    q.pop();
    for(int j = 0; j < ed1[nw].size(); j++)
    {
    int nl = ed1[nw][j];
    if(vis[nl] == 0)//第二层的新点,表明第一层不能到达 直接退出
    {
    vis[nl] = vis[nw] + 1;
    if(nw != i || vis[nl] >= 2)
    {
    flag = 1;
    break;
    }
    q.push(nl);
    }
    }
    if(flag)
    break;
    }
    while(!q.empty())
    q.pop();
    MMF(vis);
    q.push(i);
    while(!q.empty())
    {
    int nw = q.front();
    q.pop();
    for(int j = 0; j < ed2[nw].size(); j++)
    {
    int nl = ed2[nw][j];
    if(vis[nl] == 0)
    {
    vis[nl] = vis[nw] + 1;
    if(nw != i || vis[nl] >= 2)
    {
    flag = 1;
    break;
    }
    q.push(nl);
    }
    }
    if(flag)
    break;
    }
    }
    if(flag)
    puts("N");
    else puts("T");

    }
    return 0;
    }
  • 相关阅读:
    变更管理
    2020软件工程个人作业06——软件工程实践总结作业
    鸽子开发组---冲刺第七天
    冲刺第六天
    鸽子开发组---冲刺第五天
    鸽子开发组--冲刺第四天
    鸽子开发组--冲刺第三天
    鸽子开发组--冲刺第二天
    冲刺规划
    冲刺第一天
  • 原文地址:https://www.cnblogs.com/Yumesenya/p/6086738.html
Copyright © 2011-2022 走看看