题意

戳这里

题解

这题一开始感觉无从下手,所以我们要尝试得到一些结论。
自己画一画可以发现,一定是两两互为对方的庇护所。这样才有可能保证任意两个不同的城市庇护所不同。否则由于原图没有环,到后面必定会撞上。
树上的完美匹配要么无解,要么就只有唯一解。直接 dfsdfs 一趟就能得到匹配关系了。
庇护所都确定了就很简单了,就剩下一些危险度大小关系的限制。直接根据限制建拓扑图,然后用堆搞一搞就能满足字典序最小了,很经典的方法。

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000005,maxe=2000005;
int n,m,pr[maxn],d[maxn];
int fir[maxn],son[maxe],nxt[maxe],tot;
priority_queue < int,vector<int>,greater<int> > _heap;
vector< pair<int,int> > tem;
void add(int x,int y){son[++tot]=y; nxt[tot]=fir[x]; fir[x]=tot;
}
int dfs(int x,int pre){  //0完全匹配  1剩下根   2爆炸 int cnt=0;for(int j=fir[x];j;j=nxt[j]) if(son[j]!=pre){int t=dfs(son[j],x); if(t==2) return 2; if(t==1) cnt++, pr[x]=son[j], pr[son[j]]=x;}if(cnt>1) return 2;if(!cnt) return 1; return 0;
}
int main(){freopen("B.in","r",stdin);freopen("B.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n-1;i++){int x,y; scanf("%d%d",&x,&y);add(x,y); add(y,x);}if(dfs(1,1)){ printf("-1\n"); return 0; }for(int i=1;i<=n;i++)for(int j=fir[i];j;j=nxt[j])if(son[j]!=pr[i]) tem.push_back(make_pair(pr[i],son[j]));memset(fir,0,sizeof(fir)); tot=0;for(int i=0;i<tem.size();i++) add(tem[i].first,tem[i].second), d[tem[i].second]++;for(int i=1;i<=n;i++) if(!d[i]) _heap.push(i);while(!_heap.empty()){int x=_heap.top(); _heap.pop();printf("%d ",x);for(int j=fir[x];j;j=nxt[j]) if(!(--d[son[j]])) _heap.push(son[j]);}return 0;
} 

[匹配+拓扑] LibreOJ #521. 「LibreOJ β Round #3」绯色 IOI(抵达)相关推荐

  1. [LOJ #521]「LibreOJ β Round #3」绯色 IOI(抵达)(结论)

    #521. 「LibreOJ β Round #3」绯色 IOI(抵达) description solution 因为点的庇护所不能为自身,题目背景在树上,有结论一定是两个相邻点互为庇护所 所以树一 ...

  2. [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机)

    [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机) 试题描述 IOI 的比赛开始了.Jsp 和 Rlc 坐在一个角落,这时他们听到了一个异样的声音 -- 接着他们发现自己收 ...

  3. 「LibreOJ β Round #3」绯色 IOI(抵达)

    [题解] 我们可以发现叶子节点的关联点一定是它的父亲节点,那么我们dfs一遍就可以求出所有节点的关联点,或者判断出无解. 对于每个点i,它的关联点u的危险度肯定比它连接的其他点vi的危险度小,我们从u ...

  4. 【联合选讲】「LibreOJ β Round #3」绯色 IOI(悬念)

    题目 Description 胖头鱼从鱼戏团逃脱后,被主人一路追捕,他慌不择路地跑进了一颗n个节点的池子树,池子树的所有度数为1的点就是出口. 假如他现在在节点i,那么每个时刻他能选择向某个与当前点有 ...

  5. loj 523 「LibreOJ β Round #3」绯色 IOI(悬念) 霍尔定理+基环树+线段树

    题目分析 神仙题(确信) 首先,j−aij-a _ ij−ai​和ai−ja _ i-jai​−j互为相反数,若其中最小值为bib _ ibi​,则一个为bib _ ibi​一个为m−bim-b _ ...

  6. 【LOJ520】「LibreOJ β Round #3」绯色 IOI(开端)

    传送门 题解: 排序. 现在问题是找出两条从111到nnn的路径使得代价最小. 显然路径上点的编号只可能递增. 容易证明iii和i+1i+1i+1不能存在于同一条路径中.考虑p<i<i+1 ...

  7. #520. 「LibreOJ β Round #3」绯色 IOI(开端) 贪心

    妈耶,没脸见人了.巨水,想出来不写,人生重来算了. 就是个找规律题,相邻一个连一下,但是我没注意到是IOI赛制,以为是OI赛制所以没打,感觉70分好打但是懒得了.. 证明就是把相邻3个列一下式子就出来 ...

  8. [结论] LibreOJ #520. 「LibreOJ β Round #3」绯色 IOI(开端)

    题意 戳这里 题解 这是一道结论题. 我们先把数放到数轴上考虑.定义两个点的距离为几何上的距离的平方. 我们可以把一个回路看作两条从 11 到 nn 的不相交的路径. 有一种经典的二路取数的 O(n2 ...

  9. LibreOJ #6001. 「网络流 24 题」太空飞行计划 最大权闭合图

    #6001. 「网络流 24 题」太空飞行计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...

最新文章

  1. DBScript:轻量级ORM
  2. Silverlight撤消重做功能的实现。
  3. Android开发,Error: Failed to find Build Tools revision 24.0.2
  4. Istio 网关之南北向流量管理(内含服务网格专家亲自解答)
  5. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测
  6. 5G万物智联下互联网通信技术升级之路
  7. spark之CF协同过滤
  8. centos7下使用git
  9. 那些年我们追过的计算机经典书
  10. 计算机游戏动漫制作自我鉴定,动漫设计专业自我鉴定
  11. PyTorch 1.0 中文官方教程:torch.nn 到底是什么?
  12. java selenium 登录_java+selenium实例已打开chrome 实现自动化登录页面账号密码 | 茶杯猫...
  13. oracle增删改查基本语句
  14. 南阳oj 题目127 星际之门(一)
  15. 使用vue ui创建vue项目(基于图形化界面的方式)
  16. 微软亚太研发集团2013招聘
  17. ESP32-C3入门教程 IoT篇⑦——微软云 Microsoft Azure 物联网 IoT Central EspAzureIoT 实战
  18. round在python是什么意思_细说python中的round()方法
  19. 以管理为轴心 为IT服务保驾护航——北京赛特百货有限公司
  20. 华为交换机重置console密码(S3700)

热门文章

  1. 卡尔曼滤波器(8) -- 一维卡尔曼滤波器(例7例8)
  2. 微信删除好友后聊天记录恢复
  3. matlab画轨迹的代码,自动轨迹绘制(示例代码)
  4. 几款主流的App统计工具解析:友盟、Talking Data、openinstall
  5. 开发测试工程师系列课程
  6. 《秘密》吸引力法则 书摘
  7. 阿里云、腾讯云、百度云、华为云哪家的性能最好?
  8. 贵州酒店集团特产券解析
  9. 嵌入式linux完整top命令,linux下top命令详细介绍
  10. 构件组装-模型驱动的构件组装