有一些长方形边框叠在一起,求放的顺序。
因为每个边框的每条边至少会出现一个字母,所以我们可以求出每个边框的准确位置。然后每次在未用过的边框中找只包含当前字母和已用字母的边框,标记为已用过,再把遇到的已用字母向当前字母连边。最后跑个dfs,求拓扑排序。
细节挺多的,一开始没想到拓扑排序,过了好一会儿才想到。然后p数组开小了,怎么也没发现,在usaco上竟然跑出来是wa,而不是re!!!在我的电脑竟然没报错,输出的答案居然还是对的!!!……
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define inf 2147483647
#define mp make_pair
#define pii pair<int,int>
#define pb push_back
using namespace std;
char a[35][35];
bool vis[35],used[35],visit[35];
int minx[35],miny[35],maxx[35],maxy[35],d[35],sum,p[905],num[35],ans[35],rd[35],b[35][35];
set<string> s;
inline void dfs(int n){
if(n>sum){
string str="";