HDU 5961 传递 BFS

本文介绍了一种通过广度优先搜索(BFS)判断竞赛图是否可以分解为两个传递子图的方法。该方法适用于中文题目,通过对每个节点进行深度判别来确保两个子图都具有传递性质,并强调了读入优化的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


题意:中文题,就是判断一个竞赛图拆成两个图,判断是否都传递
思路:分别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;
}

转载于:https://www.cnblogs.com/Yumesenya/p/6086738.html

内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值和相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源和负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压和电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性与电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习与研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值