解题报告:luogu P5543 [USACO19FEB]The Great Revegetation S
题目链接:P5543 [USACO19FEB]The Great Revegetation S
好坑啊,都身败名裂了。
思路一:
考虑染色法,跑一遍搜所就好了,不给代码了。
思路二:
考虑并查集,我想到一个\(O(n\alpha(n)+n\log n)\)的做法,首先维护多少不能联系的集合,根据简单的排列组合知识就知道是\(2^n(n\text{是集合数})\)。
再开一个来判断是否矛盾就好了,这里用了一个并查集,中间清空一下就好了。
思考:何时不合法?(搜索也要注意呀)
显然要判断S与D的排斥,还有D与D的排斥,为了不枚举,排一下序,记得开两倍存储空间。(所以呢,\(92\)卡了好久)
\(Code\):
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=100005;
int f[MAXN],n,m,ans=0;
void init(){for(int i=0;i<=n+1;i++) f[i]=i;}
int getf(int u){return f[u]=(f[u]==u?u:getf(f[u]));}
void merge(int u,int v)
{
int t1=getf(u),t2=getf(v);
if(t1!=t2) f[t2]=t1;
return;
}
char flag;
int u,v,id[MAXN]={0};
struct node1
{
int x,y;
}a[MAXN];
struct node2
{
int x,y;
}b[MAXN<<1];
bool cmp(node2 n,node2 m){return n.x<m.x;}
int c=0,cnt=0;
int main()
{
//freopen("data.in","r",stdin);
//freopen("baoli.out","w",stdout);
scanf("%d%d",&n,&m);
init();
for(int i=1;i<=m;i++)
{
cin>>flag>>u>>v;
if(flag=='S') c++,a[c].x=u,a[c].y=v;
else if(flag=='D')
{
cnt++,b[cnt].x=u,b[cnt].y=v;
cnt++,b[cnt].x=v,b[cnt].y=u;
}
merge(u,v);
}
for(int i=1;i<=n;i++) if(f[i]==i) ans++;
sort(b+1,b+cnt+1,cmp);
int now=0;
init();
for(int i=1;i<=cnt;i++)
{
if(b[i].x==b[now].x) merge(b[i].y,b[now].y);
else now=i;
}
for(int i=1;i<=c;i++) merge(a[i].x,a[i].y);
for(int i=1;i<=cnt;i++) if(getf(b[i].x)==getf(b[i].y)){printf("0\n");return 0;}
printf("1");
for(int i=1;i<=ans;i++) printf("0");
printf("\n");
return 0;
}
解题报告:luogu P5543 [USACO19FEB]The Great Revegetation S的更多相关文章
- 【解题报告】洛谷 P2571 [SCOI2010]传送带
[解题报告]洛谷 P2571 [SCOI2010]传送带今天无聊,很久没有做过题目了,但是又不想做什么太难的题目,所以就用洛谷随机跳题,跳到了一道题目,感觉好像不是太难. [CSDN链接](https ...
- NOIP 2018 普及组 解题报告
目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 习题:codevs 1035 火车停留解题报告
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
- 习题: codevs 2492 上帝造题的七分钟2 解题报告
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
- 习题:codevs 1519 过路费 解题报告
今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...
随机推荐
- 你知道for(;;) vs. while(true)那个更快吗?
来来来, for(;;) vs. while(true) 有什么区别?从java的语义上来说,他们是一模一样的.为何怎么说? 开始我们先测试for(;;) package com.tony.test; ...
- js 根据data-i 降序排列
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- AtCoDeer and Election Report
问题 G: AtCoDeer and Election Report 时间限制: 1 Sec 内存限制: 128 MB[提交] [状态] 题目描述 AtCoDeer the deer is seei ...
- Java补强转
/* 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围, 那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char). 1. 如果没有超过左侧 ...
- python manage.py shell
启动python有两种方式:python manage.py shell和python. 这两个命令 都会启动交互解释器,但是manage.py shell命令有一个重要的不同: 在启动解释器之前,它 ...
- C++实现对MySQL数据库的连接,以及增删改查
安装好MySQL,建好数据表的前提下. 如果只是想简单实现添加数据或者其他一个操作数据,可以参考另一篇博客. https://www.cnblogs.com/ming-4/p/11544514.htm ...
- JPA中实现双向多对多的关联关系(附代码下载)
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...
- mac下Red Hat 7.4服务器初始化
物料:VMware Fusion for Mac版 rhel-server-7.4-x86_64-dvd.iso 通过VMware安装好虚拟机,打开终端: 1.通过ifconfig查看ip和网 ...
- ORM框架的概述
ORM: object relation mapping [对象][关系]映射 将对象 映射到 数据库中 类名 数据库表名 对象 ...
- BUG搬运工:CSCun88303-CIMC Memory Leak : Can't SSH/HTTP to CIMC
Symptom:Unable to SSH/HTTP to the CIMC of the C-series server, however the CIMC can be pinged. Also ...