2024.12.29 洛谷月赛总结

https://www.luogu.com.cn/contest/187568
T1
25min推完+做完
基本思路:看到这种有代价产生方式的,去思考代价如何产生,发现要么相等不用操作,要么可以直接改为2^n-1再改为t
代码:

#include<bits/stdc++.h>
using namespace std;
long long n,s,t,ans,T;
int main(){
	scanf("%d",&T);
	while (T--){
		scanf("%d%d%d",&n,&s,&t);
		ans=(((1<<n)-1)^s)+(((1<<n)-1)^t);
		if (s==t) ans=0;
		printf("%lld\n",ans);		
	}
	return 0;
} 

T2
一开始没有什么思路,用了并查集判断无解,然后构造的时候就直接将各个连通块(以题目给出的路径为边)联通,错得离谱,耗费20min
出去散了5min的心,想到了怎么做
先判断有没有环,有环则无解。
然后将两个连通块合并时,要维护每条边只被一条路径覆盖,那么考虑从一个连通块拆一条边,用这两个点链接另一个连通块上的一个点,就保持了性质。
细节:从将小连通块并到大连通块中,可以有效避免分类讨论连通块大小为1的情况
最终写完:2h(代码实现想了一百年)
代码:

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+1e4;
struct rec{
	int e,nex;
}z[10*N];
int en=1,fi[N];
struct pai{
	int cnt,p;
}a[N];
bool cmp(const pai x,const pai y){
	return x.cnt<y.cnt;
}
void add(int s,int e){
	z[++en].e=e;
	z[en].nex=fi[s];
	fi[s]=en;
}
bool vis[N],vis2[10*N];
int tot;
bool dfs(int u,int fa){
	vis[u]=true;
	a[tot].cnt++;
	for (int i=fi[u];i!=0;i=z[i].nex){
		if (z[i].e==fa) continue;
		if (vis[z[i].e]==true) return false;
		if (dfs(z[i].e,u)==false) return false;
	}
	return true;
}
int n,m;
void init(){
	scanf("%d%d",&n,&m);
	for (int i=1;i<=m;++i){
		int s,e;
		scanf("%d%d",&s,&e);
		add(s,e);add(e,s);
	}
}
void check(){
	for (int i=1;i<=n;++i){
		if (vis[i]==false){
			++tot;
			a[tot].p=i;a[tot].cnt=0;
			if (dfs(i,0)==false){
				printf("No");
				exit(0);
			}
		}
	}
}
void work(){
	printf("Yes\n");
	sort(a+1,a+1+tot,cmp);
	for (int i=tot;i>=2;i--){
		int bi1=fi[a[i].p];
		while (bi1!=0&&vis2[bi1]==true) bi1=z[bi1].nex;
		if (bi1!=0) vis2[bi1]=vis2[bi1^1]=true;
		add(a[i].p,a[i-1].p);add(a[i-1].p,a[i].p);
		if (bi1!=0) add(z[bi1].e,a[i-1].p);add(a[i-1].p,z[bi1].e);
	}
	for (int i=1;i<=n;++i){
		for (int j=fi[i];j!=0;j=z[j].nex){
			if (vis2[j]==false){
				printf("%d %d\n",i,z[j].e);
				vis2[j]=true;vis2[j^1]=true;
			}
		}
	}
}
int main(){
	init();
	check();
	work();
	return 0;
}

T3
在想T2的时候去看了一下,发现可以枚举前缀长度恰好为i时去统计答案,但是然后就不会了,目前数学差的要死
直接13pts暴搜走人
T4
想了第一档10pts的部分分,后面在元旦晚会的时候想出来了不带修的20pts,推不出正解,但想了一些性质

总结:
1.比赛只从两点半打到了五点,根本没有认真打,打的时候多次想放弃,吃完饭贪玩没回来打,态度不正
2.比赛时切T1、T2速度过慢,代码实现能力不佳,但总感觉有种不想打的心态,非常不好,非常不自信
3.思考的时候多次走动,坐不定

接下来还得提升代码实现能力,要相信自己能够场切蓝、紫,T1、T2不要想得太复杂,特别时这种T2是构造的

posted @ 2024-12-30 12:21  C//  阅读(35)  评论(0)    收藏  举报