其他分享
首页 > 其他分享> > 2021/7/9——集训Day.4

2021/7/9——集训Day.4

作者:互联网

嘴疼死
早饭吃了块儿面包,午餐吃了俩鸡腿
xf学长把我订的抱枕带过来了,学长太帅了
上午讲的东西很自闭
基本上都不会
衡一的大佬按着黑题说是基础题,紫题瑟瑟发抖,没见过蓝色
斜率优化 D P DP DP 是什么我都没搞懂
还有矩阵乘法/快速幂,这种东西
除此之外的东西能尽力跟个一点点,太难了
中午临吃饭的时候zwj老师还看到hyp电脑桌面有个群聊(集训开的小群),然后遍历了一遍,直接社死了好吧
上午的知识点就不总结了,能听懂的都是零零碎碎的,没法写下来啊
看装压去了
下午装压也是一头雾水,晚上开始写题
先写了个树上 D P DP DP:小胖守皇宫,找不到链接,随便粘了个还不错的装压的博客
一开始以为用没有上司的舞会就能水过去,然后细看感觉不一样,这个可以根据情况,站到相邻的两个节点去

#include<bits/stdc++.h>
using namespace std;
#define N 100010
int f[N][5],nxt[N<<1],n,v[N],y[N<<1],tot,hd[N]; 
void lian(int a,int b){y[++tot]=b;nxt[tot]=hd[a];hd[a]=tot;}
void dfs(int x,int fa)
{
	int t=2147483646;
	for(int i=hd[x];i;i=nxt[i])
	{
		if(y[i]==fa)continue;
		dfs(y[i],x);
		f[x][0]+=min(f[y[i]][0],min(f[y[i]][1],f[y[i]][2]));
		f[x][1]+=min(f[y[i]][0],f[y[i]][1]);
		f[x][2]+=min(f[y[i]][1],f[y[i]][0]);
		t=min(t,f[y[i]][0]-min(f[y[i]][0],f[y[i]][1]));
	}
	f[x][0]+=v[x];f[x][1]+=t;
}
int main()
{
	scanf("%d",&n);int a,b;
	for(int i=1;i<=n;i++){scanf("%d",&v[i]);}
	for(int i=1;i<n;i++){scanf("%d%d",&a,&b);lian(a,b);}
	dfs(1,0);
	printf("%d",min(f[1][1],f[1][0]));
}

跑 d f s dfs dfs f[x][0]f[x][1]f[x][2]分别表示x号节点由自己守护,由父亲守护,儿子守护。

然后这样转移状态。

就 A A A 了。

然后有个题,学长造的数据有问题,只要输出个 1 1 1 就能 A A A
于是我 … … …… ……

#include<bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
using namespace std;
struct ios{
    inline char read(){
        static const int IN_LEN=1<<18|1;
        static char buf[IN_LEN],*s,*t;
        return (s==t)&&(t=(s=buf)+fread(buf,1,IN_LEN,stdin)),s==t?-1:*s++;
    }
    template <typename _Tp> inline ios & operator >> (_Tp&x){
        static char c11,boo;
        for(c11=read(),boo=0;!isdigit(c11);c11=read()){
            if(c11==-1)return *this;
            boo|=c11=='-';
        }
        for(x=0;isdigit(c11);c11=read())x=x*10+(c11^'0');
        boo&&(x=-x);
        return *this;
    }
}io;
void write(int x)
{
    if(x<0)putchar('-'),x=-x;
    if(x>9)write(x/10);
    putchar((x%10)^48);
}
long long gcd(long long x,long long y){
	if(x<y) swap(x,y);
	if(y==0) return x;
	else return gcd(y,x%y);
}
int add(int a,int b,int p=mod){return a+b>=p?a+b-p:a+b;}
int sub(int a,int b,int p=mod){return a-b<0?a-b+p:a-b;}
int mul(int a,int b,int p=mod){return (LL)a*b%p;}
void sadd(int &a,int b,int p=mod){a=add(a,b,p);}
void ssub(int &a,int b,int p=mod){a=sub(a,b,p);}
void smul(int &a,int b,int p=mod){a=mul(a,b,p);}
int random(int x){return (long long)rand()*rand()%x;}
int main(){puts("1");return 0;}

但是 A t c o d e r Atcoder Atcoder 提醒我不能水题
在这里插入图片描述
虽然看不懂再说什么,但是把我拉回了正轨

开始写【HAOI2015】树上染色这个题。
经典老题了,这里就只粘个代码哈~

#include<bits/stdc++.h>
using namespace std;
#define N 2010
int tot,n,k,sz[N],hd[N],nxt[N<<1],v[N<<1],y[N<<1];long long f[N][N];
void lian(int a,int b,int c){y[++tot]=b;nxt[tot]=hd[a];hd[a]=tot;v[tot]=c;}
void dfs(int x,int fa)
{
	f[x][0]=0;f[x][1]=0;sz[x]=1;
	for(int i=hd[x];i;i=nxt[i])
	{
		if(y[i]==fa)continue;
		dfs(y[i],x);sz[x]+=sz[y[i]];
	}
	for(int i=hd[x];i;i=nxt[i])
	{
		if(y[i]==fa)continue;
		for(long long j=min(k,sz[x]),sum;~j;j--)for(int g=0;g<=min(j,sz[y[i]]*1ll);g++)
			if(f[x][j-g]!=-1)
			{
				sum=g*(k-g)+(sz[y[i]]-g)*(n-k-sz[y[i]]+g);
				f[x][j]=max(f[x][j],f[x][j-g]+f[y[i]][g]+sum*v[i]);
			}
	}
}
int main()
{f
	scanf("%d%d",&n,&k);int a,b,c;
	for(int i=1;i<n;i++){scanf("%d%d%d",&a,&b,&c);lian(a,b,c);lian(b,a,c);}
	memset(f,-1,sizeof f);dfs(1,0);
	cout<<f[1][k];
}

只剩 25 m i n 25 min 25min 了,不想写题了,真自闭啊,
不过今天还碰到qjz学弟了,他退役前我一直认为他会成长为他们那一届最强的 o i e r oier oier
还有就是在班级群里被jkh神犇 F a k e Fake Fake 了
那个颅内骨折的同学家里开了个玩剧本杀的店,说我带人的话,我带的人六折,我免费
在这里插入图片描述
h h h c hhhc hhhc ,但我还是没时间啊
然后还和初中同学聊了聊天,有个人我还挺想的(一开始想不起他的名字,差点哭出来,自闭了)
大概就是这样吧,不想说什么了,过两天考试,我 D P DP DP 直接废掉,图论看明天学得怎样了。

标签:GCC,int,Day.4,long,集训,2021,pragma,c11,optimize
来源: https://blog.csdn.net/ydsrwex/article/details/118605079