https://vijos.org/p/1892

此题需要手动开栈:

int size=<<; //256MB
char *p=(char*)malloc(size)+size;
__asm__("movl %0, %%esp\n" :: "r"(p));

还需要卡评测机←十分的神

卡了30多次评测机终于屈服了,一开始我盲目乱提交,总是T,后来上网找了一下解决卡常数方法,如下:

  解决卡常数的方法比较多样化,主要有重复交题,拼人品让测评机快一点,在代码末尾加上//orz+神犇名字等(注意:没加“//”可能导致运行时间直接变为0ms!)。很多计算机算法竞赛的专家也在钻研如何解决这一问题,所以类似ZKW线段树等可以有效减少常数的时间占用的方法也在不断被发现,今后还有很大的探索空间。

没错,从那之后我提交就在程序最后加// orz ...,把人差不多都%了个遍,但都是90分,%charge时只是80分,但当我%马神(Godder)时成功AC!所以以后被卡常时就%%Godder,说不定就能AC。OI隐藏技能

以下是我的ACcode,重点在倒数第二行,保我AC的那一行

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
inline const int max(const int &a,const int &b){return a>b?a:b;}
inline const int min(const int &a,const int &b){return a<b?a:b;}
const int N=;
struct charge{
int nxt,to;
}e[N<<];
int cnt=,point[N],r[N],sr[N],et[N],f[N][];
long long M,g[N][];
void read(int &sum)
{
char c=getchar();sum=;
while (c<''||c>'') c=getchar();
while (''<=c&&c<='') sum=sum*+c-,c=getchar();
}
void insect(int x,int y){e[++cnt].nxt=point[x];point[x]=cnt;e[cnt].to=y;}
void dp(int x,int fa)
{
long long tp; int mx,j,sz=;
g[x][]=;
for (int i=point[x];i;i=e[i].nxt) if (e[i].to!=fa)
{
j=e[i].to;
dp(j,x); tp=;
mx=max(f[j][],f[j][]); f[x][]+=mx;
if (f[j][]==mx) tp=g[j][];
if (f[j][]==mx) tp+=g[j][];
g[x][]=(g[x][]*tp)%M;
}
for (int i=point[x];i;i=e[i].nxt)
if (e[i].to!=fa) et[++sz]=e[i].to;
r[sz+]=; sr[sz+]=;
for3 (i,sz,)
{
mx=max(f[et[i]][],f[et[i]][]);
r[i]=r[i+]+mx;
tp=;
if (f[et[i]][]==mx) tp=g[et[i]][];
if (f[et[i]][]==mx) tp+=g[et[i]][];
sr[i]=(sr[i+]*tp)%M;
}
long long sl=; int l=;
for1 (i,,sz)
{
mx=l+r[i+]+f[et[i]][]+;
if (mx>f[x][])
{
f[x][]=mx;
g[x][]=((sl*sr[i+])%M*g[et[i]][])%M;
}
else if (mx==f[x][])
g[x][]=(g[x][]+(((sl*sr[i+])%M*g[et[i]][])%M))%M;
mx=max(f[et[i]][],f[et[i]][]);
l+=mx; tp=;
if (f[et[i]][]==mx) tp=g[et[i]][];
if (f[et[i]][]==mx) tp+=g[et[i]][];
sl=(sl*tp)%M;
}
}
void outit()
{
int mx=max(f[][],f[][]),ans=;
if (mx==f[][]) ans=g[][];
if (mx==f[][]) ans+=g[][];
printf("%d\n%lld\n",mx,ans%M);
}
int main()
{
int size=<<; //256MB
char *p=(char*)malloc(size)+size;
__asm__("movl %0, %%esp\n" :: "r"(p));
memset(point,,sizeof(point));
memset(f,,sizeof(f));
memset(g,,sizeof(g));
int n,i,x,y;
read(n);
for2 (i,,n)
{
read(x); read(y);
insect(x,y); insect(y,x);
}
scanf("%lld\n",&M);
dp(,-);
outit();
return ;
// orz Godder
}

然后就行了。

Vijos p1892 树上的最大匹配 树形DP+计数 被卡常我有特殊技巧heheda的更多相关文章

  1. 【vijos】1770 大内密探(树形dp+计数)

    https://vijos.org/p/1770 不重不漏地设计状态才能正确的计数QAQ 虽然可能最优化是正确的,但是不能保证状态不相交就是作死.... 之前设的状态错了... 应该设 f[i][0] ...

  2. BZOJ_4033_[HAOI2015]树上染色_树形DP

    BZOJ_4033_[HAOI2015]树上染色_树形DP Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的 ...

  3. 2021.07.17 P3177 树上染色(树形DP)

    2021.07.17 P3177 树上染色(树形DP) [P3177 HAOI2015]树上染色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.dp思想是需要什么,维护 ...

  4. 【vijos】1892 树上的最大匹配(树形dp+计数)

    https://vijos.org/p/1892 这个必须得卡评测机+手动开栈才能卡过QAQ 手动开栈我百度的... int size=256<<20; //256MB char *p=( ...

  5. Vijos p1770 大内密探 树形DP+计数

    4天终于做出来了,没错我就是这么蒟蒻.教训还是很多的. 建议大家以后编树形DP不要用记忆化搜索,回溯转移状态个人感觉更有条理性. 大神题解传送门 by iwtwiioi 我的题解大家可以看注释&quo ...

  6. 树上的等差数列 [树形dp]

    树上的等差数列 题目描述 给定一棵包含 \(N\) 个节点的无根树,节点编号 \(1\to N\) .其中每个节点都具有一个权值,第 \(i\) 个节点的权值是 \(A_i\) . 小 \(Hi\) ...

  7. [vijos 1642]班长的任务 [树形dp]

    背景 十八居士的毕业典礼(1) 描述 福州时代中学2009届十班同学毕业了,于是班长PRT开始筹办毕业晚会,但是由于条件有限,可能每个同学不能都去,但每个人都有一个权值,PRT希望来的同学们的权值总和 ...

  8. 【BZOJ4033】[HAOI2015] 树上染色(树形DP)

    点此看题面 大致题意: 给你一棵点数为N的带权树,要你在这棵树中选择K个点染成黑色,并将其他的N-K个点染成白色.要求你求出黑点两两之间的距离加上白点两两之间距离的和的最大值. 树形\(DP\) 这道 ...

  9. Codeforces Round #277 (Div. 2)D(树形DP计数类)

    D. Valid Sets time limit per test 1 second memory limit per test 256 megabytes input standard input ...

随机推荐

  1. MIT jos 6.828 Fall 2014 训练记录(lab 1)

    注: 源代码参见我的github:https://github.com/YaoZengzeng/jos Part 1: PC Bootstrap +------------------+ <- ...

  2. Adaboost 卡口车辆检测训练

    之前做了SVM的车脸检测,主要是针对车脸,接下来尝试利用Adaboost和Haar进行车脸的检测.我利用的主要是opencv中的cascade,其已经把Adaboost相关的算法做成了exe,直接调用 ...

  3. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  4. windows客户机连接gerrit的一个报错处理

    gerrit环境部署在linux服务器,windos客户机连接gerrit进行代码操作: 在windows客户机下载Git客户端 在“Git Bash”里使用 ”ssh-keygen -t rsa - ...

  5. 监控Mysql主从环境下Slave延迟状态的操作记录

    在MySQL主从环境下,通常会根据Seconds_Behind_Master的值来判断slave的延迟状态,这么做在大部分情况下尚可接受,但其实是并不够准确的.对于Slave延迟状态的监控,应该考虑多 ...

  6. IOS定位服务的应用

    IOS定位服务的应用 一.授权的申请与设置 二.定位服务相关方法 三.定位服务代理的相关方法 四.定位服务获取到的位置对象 五.航标定位得到的航标信息对象 IOS定位服务的应用 一.授权的申请与设置 ...

  7. 如何在.net4.0中使用.net4.5的async/await

    推荐文章: http://www.cnblogs.com/hj4444/p/3857771.html http://www.cnblogs.com/dozer/archive/2012/03/06/a ...

  8. Linux 进程通信(有名管道)

    有名管道(FIFO) 有名管道是持久稳定的. 它们存在于文件系统中. FIFO比无名管道作用更大,因为他们能让无关联的进程之间交换数据. 管道文件一般用于交换数据. shell命令创建管道 一个she ...

  9. Difference Between TIF and TIFF

    TIF vs TIFF Many people are confused with similar file extensions that only differ by a single lette ...

  10. IBatis.Net学习笔记七--日志处理

    IBatis.Net中提供了方便的日志处理,可以输出sql语句等调试信息. 常用的有两种:1.输出到控制台:   <configSections>    <sectionGroup  ...