目测某年HNOI,(其实这个题是2011年的WF,hdu上找到的,HNOI2012那个中文题在bzoj和loj上都有,叫矿场搭建,题意几乎一样,数据比较弱,交这份代码也能A)。

先讲题解,然后说一些有(e)趣(xin)的事情。

首先肯定是个点双,先求一下点双。

然后我们分析一下。

当这个点双里没割点时(一个大号的孤立点双),那么我们要建两个特殊节点,因为一个塌了可以去另一个,对第1问贡献为2,第2问贡献贡献为C(n,2)=(n-1)*n/2。(n是点双大小哦)。

当这个点双有一个割点(一个叶子),那么我们在除割点以外的地方建特殊节点,因为割点塌了去自家的,自家的塌了走割点去隔壁的。对第1问贡献为1,第2问贡献为n-1。(n是点双大小哦)。

当这个点双有两个及以上割点时,别建,天塌下来有两个及以上隔壁顶着。无贡献。

多测,注意清空。

下面说一些题外话。

这个题码完以后去bzoj交那个中文题,WA了,交loj,70,一看,错的是那三个小点,大点都过了……后来发现T清零了……case一个1,若干0,赶紧改,一交A了,回bzoj,A了。

然后交自家oj,RE,一看,数组可能要2倍,开完一交,又RE,一直交,一直RE,我去,这数据也TQL,一想,可能挂在外网上,min和max都改手打,还是RE,到处窜座去问,没人能给出解答(因为我是倒着刷的),然后去找啾啾,他上hdu给我找了一手,找到了,交,TLE,3000,一个测试点?WF?这么那啥。静态调错,init里边数没清零……明白了,那两个A的是因为数据太小,我的数组开的太大,不清空边数都没炸……那WF的题5e4的大范围,不出5个就卡死了,赶紧改,交,WA了。

静态调错,ans2*=写的赋值,点双大小写的n(知道我上文为什么要强调了吗?我推的时候拿n推的,打的时候忘了),改,交,A了。

现在又明白一个问题,bz和loj上的那道题,只有一个点双就是一个大的点双,没有孤立的,所以上面的错误就是正确的。

所以,做完这个题就不要去做那个题了,没意思了。(试了试,ans2*=C(n,2)也能A,有点迷,难不成WF也默认了?)

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
int read(){
int sum=,f=;char x=getchar();
while(x<''||x>''){
if(x=='-') f=-;
x=getchar();
}while(x>=''&&x<=''){
sum=sum*+x-'';
x=getchar();
}return sum*f;
}
struct EDGE{
int ed,nex;
}edge[];
int first[],num;
int n,m,root;
int dfn[],low[],sta[];
int ord,top,vccnum,T;
vector<int>vcc[];
long long ans1=,ans2=;
bool cut[];
inline int max(int a,int b){
return a>b?a:b;
}
inline int min(int a,int b){
return a<b?a:b;
}
void init(){
memset(edge,,sizeof(edge));
memset(first,,sizeof(first));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(cut,,sizeof(cut));
for(int i=;i<=vccnum;i++) vcc[i].clear();
ord=top=num=vccnum=ans1=root=n=;
ans2=;
} void tarjan(int x){
dfn[x]=low[x]=++ord;
sta[++top]=x;
if(x==root&&first[x]==){
vcc[++vccnum].push_back(x);
return ;
}
int child=;
for(int i=first[x];i;i=edge[i].nex){
int y=edge[i].ed;
if(!dfn[y]){
tarjan(y);
low[x]=min(low[x],low[y]);
if(low[y]>=dfn[x]){
child++;
if((x==root&&child>=)||(x!=root&&child>)) cut[x]=;
vcc[++vccnum].push_back(x);
int p;
do{
p=sta[top--];
vcc[vccnum].push_back(p);
}while(p!=y);
}
}else low[x]=min(low[x],dfn[y]);
}
}
void add(int st,int ed){
edge[++num].ed=ed;
edge[num].nex=first[st];
first[st]=num;
}
int main(){
// freopen("c.in","r",stdin);
m=read();
while(m!=){
T++;
for(int i=,x,y;i<=m;i++){
x=read();y=read();
add(x,y);add(y,x);
n=max(n,x);n=max(n,y);
}
for(int i=;i<=n;i++)
if(!dfn[i]) root=i,tarjan(i);
for(int i=;i<=vccnum;i++){
int sum=;
for(int j=;j<vcc[i].size();j++)
if(cut[vcc[i][j]])
sum++;
if(!sum){
ans1+=;
ans2*=vcc[i].size()*(vcc[i].size()-)/;
}
else if(sum==){
ans1++;
ans2*=1ll*(vcc[i].size()-);
}
}
printf("Case %d: %lld %lld\n",T,ans1,ans2);
m=read();init();
}
}

带着浓重的戾气。

HDU3844Mining Your Own Business的更多相关文章

  1. 在 SharePoint Server 2016 本地环境中设置 OneDrive for Business

    建议补丁 建议在sharepoint2016打上KB3127940补丁,补丁下载地址 https://support.microsoft.com/zh-cn/kb/3127940 当然不打,也可以用O ...

  2. Java Business Process Management(业务流程管理) 初识环境搭建

    一.简介 (一)什么是jbpm JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易 ...

  3. Tips for Planning Your Business Startup

    原文链接:http://domaintree.me/?p=1037 By Robert Thibodeau –  Starting a business can be a very daunting ...

  4. 10 Biggest Business Mistakes That Every Entrepreneur Should Avoid

    原文链接:http://www.huffingtonpost.com/syed-balkhi/10-biggest-business-mista_b_7626978.html When I start ...

  5. 7 COMPELLING REASONS YOU NEED TO START THE BUSINESS YOU’VE ALWAYS WANTED

    原文链接:http://lesseesadvocate.com/7-compelling-reasons-need-start-business-youve-always-wanted/ Don’t ...

  6. business knowledge

    Finance knowledge Trading---At the core of our business model is Trading, which involves the buying ...

  7. Business Unit Lookup in Form

    Just add the below code in lookup() of StringEdit control in Form to get the Business Unit Lookup: p ...

  8. Office 365 系列一 ------- 如何单个安装Office 客户端和Skype for business

    当我们注册好或者购买好 Office 365后,我们的单个用户如何进行在线的.流式的方式安装好我们的客户端,特别是对于我们非IT部门来说,这是一个比较为难的事情, 经常需要我们的IT去到同事的电脑旁边 ...

  9. 更改 Skype for Business Online 的 Sip 地址以匹配UPN

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

随机推荐

  1. 修改this的指向

    call var a={ name:'xuux', fn:function(a,b){ console.log(a+b); console.log(this);//{name: "xuux& ...

  2. node jade || ejs引擎模板

    1.jade:破坏式2.ejs:保留式 -------------------------------------------------------------------------------- ...

  3. VSCode主题自定义(附详细注释及本人主题分享)

    先来一张本人自己配置的主题截图,喜欢的拿去用: 下面说说怎么自定义主题: 1.     Ctrl + ,(Ctrl键 + 逗号键):打开设置,也可以依次点击编辑器左上角 => 文件 => ...

  4. 99乘法表(js)

    //九九乘法表 let i,j,str; for(i=1;i<=9;i++) { str = ""; for(j=1;j<=i;j++) { str = str+i+' ...

  5. Vim中复制粘贴缩进错乱问题的解决方案

    Vim中复制粘贴缩进错乱问题的解决方案 当你把这段缩进优美的代码直接ctrl+c,ctrl+v到Vim的时候,就会出现如下恶心的情况 可以看到,这种直接粘贴的方式会导致代码丢失和缩进错乱等情况. 解决 ...

  6. SQL Server 2005 实现数据库同步备份 过程--结果---分析

    数据库复制:   简单来说,数据库复制就是由两台服务器,主服务器和备份服务器,主服务器修改后,备份服务器自动修改. 复制的模式有两种:推送模式和请求模式,推送模式是主服务器修改后,自动发给备份服务器, ...

  7. golang实现RSA加密解密

    非对称加密示意图: 在此可以看到,非对称加密是通过两个密钥(公钥-私钥)来实现对数据的加密和解密的.公钥用于加密,私钥用于解密. RSA公钥和私钥生成: package main import ( & ...

  8. 转载 如何使用批处理 动态改变path实现改变JDK版本

    http://www.cnblogs.com/xdp-gacl/p/5209386.html 1 @echo off 2 3 rem --- Base Config 配置JDK的安装目录 --- 4 ...

  9. Winfrom UI 美化 MetroModernUI库应用实例

    使用方式: 选择项目==>右键==>管理NuGet安装包==>输入Metro==> ==>添加选项卡(自定义命名,例如Metrol UI)==>浏览 ==>加 ...

  10. zencart重置用户登录密码sql

    zencart重置用户ID为99的登录密码为aaaaaaa ;