本题并不难,主要在于将电路连接图抽象为有向图,然后进行简单拓扑排序即可,下文给出代码在已在几个点给出注释
/*
* @Author: csc
* @Date: 2020-12-14 17:29:08
* @LastEditTime: 2020-12-19 19:10:17
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \code\csp\2009_3.cpp
*/
#include <bits/stdc++.h>
const int N = 1e4 + 100;
const int M = 1000;
using namespace std;
int m, n, s, k;
vector<int> tin[N], tout[N];// 存输入输出数据
typedef struct Node
{
int v;
Node(int vv) : v(vv) {
}
} node;
vector<node> ad[M];//邻接表存储
int in[M], w[M];// in 存入度 w存出度
bool vis[M];// 标志结点是否遍历到 在cal函数中使用到
map<int, string> device;//采用map函数映射每个结点对应的器件
void init()
{
fill(vis, vis + M, false);
memset(in, 0, sizeof(in));
for (int i = 0; i < N; ++i)
{
tin[i].clear();
tout[i].clear();
}
for (int i = 0; i < M; ++i)
{
ad[i].clear();
}
device.clear();
}
void _init()
{
fill(vis, vis