您的位置:首页 > 其它

CS 400 BFS-DFS 构造

2017-11-29 20:26 239 查看
题意:n个点的图 起点都为1,给出其dfs和bfs序列 若有解,求出其m条边 否则输出-1.n<=4096. 边的个数<=1e5.

第2个点如果不同 则无解.
构造:1和按顺序和b[i]连边  然后对每个(d[i-1],d[i])[i>1] 连一条边 此时满足bfs,dfs序列(66666).

#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> ii;
const int N=4e3+120;
int n,b
,d
;
map<int,int> mp
;
vector<ii> res;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&b[i]);
for(int i=1;i<=n;i++)
scanf("%d",&d[i]);
if(b[2]!=d[2])
{
puts("-1");
return 0;
}
for(int i=2;i<=n;i++)
{
mp[1][b[i]]=1;
res.push_back(ii(1,b[i]));
}
for(int i=2;i<=n;i++)
{
if(mp[d[i-1]][d[i]])
continue;
mp[d[i-1]][d[i]]=1;
res.push_back(ii(d[i-1],d[i]));
}
printf("%d\n",res.size());
for(int i=0;i<res.size();i++)
printf("%d %d\n",res[i].first,res[i].second);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: