题目链接: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的更多相关文章

  1. 【解题报告】洛谷 P2571 [SCOI2010]传送带

    [解题报告]洛谷 P2571 [SCOI2010]传送带今天无聊,很久没有做过题目了,但是又不想做什么太难的题目,所以就用洛谷随机跳题,跳到了一道题目,感觉好像不是太难. [CSDN链接](https ...

  2. NOIP 2018 普及组 解题报告

    目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...

  3. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  4. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  5. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  6. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  7. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  8. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  9. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

随机推荐

  1. opencv:图像直方图相似性比较

    void hist_compare(Mat src1, Mat src2) { int histSize[] = { 256, 256, 256 }; int channels[] = { 0, 1, ...

  2. selenium常用的类库、对应的方法和属性

    selenium常用的类库.对应的方法和属性

  3. SPAN, RSPAN, ERSPAN

    该文档摘自:Home > CCIE Routing and Switching Study Group > Discussions 由 Deben 于 2015-2-6 上午6:50 创建 ...

  4. python csv 数据切割定制jmeter数据

    需求压测随机抽取10w数据中自定义区间的指定数量数据进行压测: jmeter csv/txt配置: 需要获取{data: [${myList}]  }  jmeter需要数据类型 获取展读取csv数据 ...

  5. java比较时间的方法

    一.通过compareTo Date date = new Date(1576118709574L); Date date1 = new Date(1576118709574L); Date date ...

  6. 探索 Python + HyperLPR 进行车牌识别

    概要 HyperLRP是一个开源的.基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP.C/C++.Python语言,Windows/Mac/Linux/Android/IO ...

  7. Linux - Windows下的Linux工具

    1. putty, 2. winscp(可下载文件) 3. SecureCRT

  8. 计算机基础,Python - Map和Reduce

    例子1. python中实现hashable def __hash__(self): hashes = map(hash, self.components) return functools.redu ...

  9. Python引用某一文件的方法出现红色波浪线

    from parse import parse_url#引用parse里面的方法 结果出现波浪线并提示 This inspection detects names that should resolv ...

  10. opencv python:模糊操作

    均值模糊 中值模糊 自定义模糊 模糊操作的基本原理 基于离散卷积 定义好每个卷积核 不同卷积核得到不同的卷积效果 模糊是卷积的一种表象 blur cv2.blur(image, (1, 3)) 第二个 ...