输入说明
第一行 点数n 边数m 集合中字符数目k
第二行 集合中的字符
接下去m行 每一行三个值 起点 终点 经过的边上的字符
输出:
构造好的边
新构造节点包含的原先的点的集合
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define fi first
#define se second
using namespace std;
typedef vector<int> vi;
const int N = 1000;
int n,m,k;
struct Edge{
int to,nxt;
char w;
};
class Graph{
private:
int *head;
int tot;
Edge *edge;
vector<vi> ans;
bool *vis;
queue<vi> que;
vector<char> chArray;
int n,m;
public :
vo