首页 > 其他分享 >【考后总结】6 月西安多校国赛模拟赛 5

【考后总结】6 月西安多校国赛模拟赛 5

时间:2023-06-27 20:13:22浏览次数:47  
标签:cnt 考后 bel int 多校 国赛 read maxn deg

6.24 冲刺国赛模拟 24

T2 简单图论题

原题:Gym-104053C Customs Controls 2

构造题。

这个限制可以进一步加强到对于每个节点 \(u\),\(1\to u\) 的路径权值都相等,定义为 \(d_u\)。

于是对 \(u\) 连边的两个节点的 \(d\) 一定相等,进而可以把所有相等的缩到一起,且这些点直接不能连边(点权至少是 \(1\)),这样可以对处理过后的图跑最长路,如果存在环一定无解。

最后的答案就是任意找一条连向 \(v\) 的边 \((u,v)\),其中 \(w_v=d_v-d_u\)。

点击查看代码
int t;
int n,m;
vector<int> E1[maxn],E2[maxn],E3[maxn];
int bel[maxn],id[maxn];
int find(int x){
	if(x==bel[x]) return x;
	return bel[x]=find(bel[x]);
}
int deg[maxn];
int f[maxn],g[maxn],cnt;
int main(){
	freopen("dag.in","r",stdin);
	freopen("dag.out","w",stdout);
	t=read();
	while(t--){
		n=read(),m=read();
		for(int i=1;i<=n;++i) E1[i].clear(),E2[i].clear(),E3[i].clear();
		for(int i=1;i<=m;++i){
			int u=read(),v=read();
			E1[u].push_back(v),E2[v].push_back(u);
		}
		for(int i=1;i<=n;++i) bel[i]=i,id[i]=0,deg[i]=0; 
		for(int u=1;u<=n;++u){
			for(int i=1;i<(int)E2[u].size();++i){
				int v1=E2[u][i-1],v2=E2[u][i];
				int f1=find(v1),f2=find(v2);
				// printf("%d %d %d %d\n",v1,v2,f1,f2);
				bel[f2]=f1;
			}
		}
		int tot=0;
		for(int i=1;i<=n;++i){
			// printf("%d %d\n",i,find(i));
			if(find(i)==i) id[i]=++tot;
		}
		bool chk=1;
		for(int u=1;u<=n;++u){
			for(int v:E1[u]){
				if(find(u)==find(v)) chk=0;
				else{
					E3[id[find(u)]].push_back(id[find(v)]);
					++deg[id[find(v)]];
				}
			}
		}
		queue<int> q;
		if(deg[1]) chk=0;
		f[1]=1;
		q.push(1);
		cnt=0;
		while(!q.empty()){
			int u=q.front();
			q.pop();
			++cnt;
			for(int v:E3[u]){
				f[v]=f[u]+1;
				--deg[v];
				if(!deg[v]) q.push(v);
			}
		}
		if(cnt<tot) chk=0;
		g[1]=1;
		for(int v=2;v<=n;++v){
			int u=E2[v][0];
			g[v]=f[id[find(v)]]-f[id[find(u)]];
		}
		if(!chk) printf("No\n");
		else{
			printf("Yes\n");
			for(int i=1;i<=n;++i) printf("%d ",g[i]);
			printf("\n");
		}
	}
	return 0;
}

标签:cnt,考后,bel,int,多校,国赛,read,maxn,deg
From: https://www.cnblogs.com/SoyTony/p/Multiple_School_Simulation_Problems_of_NOI_in_Xian_June_

相关文章

  • 【杂题乱写】6 月多校字符串专题训练
    ACodeForces-547EMikeandFriends*2800肯定要建广义SAM。在每个\(cur\)打一个标记,没有区间限制就在对应节点上查一下后缀树子树标记总数,有区间限制线段树合并维护标记。点击查看代码intn,q;chars[maxn];intmark[maxn];structSegmentTree{#definemid((l+r)>......
  • 蓝桥杯国赛线上游祭
    退役。最多也才三等...没心情写,6题只做出来一题,其他打表打满,后面再补吧总的说还是实力不行,有几道题是之前看到过的,但是没想着要去弄懂它,结果现在遇到就不会了...考过就算了,收拾好心态继续学,9月份争取csp能拿到蓝勾......
  • 【考后总结】6 月西安多校模拟赛 5
    6.24冲刺国赛模拟24T2简单图论题原题:Gym-104053CCustomsControls2构造题。这个限制可以进一步加强到对于每个节点\(u\),\(1\tou\)的路径权值都相等,定义为\(d_u\)。于是对\(u\)连边的两个节点的\(d\)一定相等,进而可以把所有相等的缩到一起,且这些点直接不能连边(点......
  • 【考后总结】6 月西安多校模拟赛 4
    6.21冲刺国赛模拟22T1跳跃不妨看作两只青蛙从相同起点出发且跳跃次数相同,设\(f_{i,j,k}\)为两只青蛙分别在\(i,j\)位置,且相差步数\(k\)。由于需要记录相邻位置对答案贡献,我们在要求必须严格按照升序对处理状态,也就是必须保证当前跳跃的一只青蛙落点在另一只青蛙更前面,且......
  • 【杂题乱写】6 月西安多校 DP 专题训练
    这也太难了!这也太难了!这也太难了!AUOJ-607UR#20跳蚤电话加点操作太抽象,改成删点,每次可以删一个叶子,或者删一个只有一个父亲和一个儿子的节点。算方案还带顺序,子树间再算多重集组合数不方便,不如直接算任意顺序删点最后合法删完的概率。设\(f_u\)为按任意顺序删点删完\(u\)......
  • transform (牛客多校) (双指针+二分+ 中位数妙用+前缀和相减维护)
    题目大意:n个商店在一条直线上, 有一个xi然后有ai个商品你可以把商店的物品移动到另一个商店,代价为:abs(xi-xj)在代价不超过T的情况下你可以选择一个商店来让其他商店的物品都移到这个商店,问最多移动多少个物品  思路:双指针维护一个最大的区间,因......
  • 2022 RoboCom 世界机器人开发者大赛-本科组(国赛)个人题解
    RC-u4变牛的最快方法思路最短编辑距离+记录路径板子题,不懂最短编辑距离的可以看看网上的博客。不懂为什么官方题解用的bfs写法,然后网上所有的题解就是bfs了。我这里就是双重for循环实现,参考下写法即可。代码点击查看代码#include<bits/stdc++.h>#definexfirst#definey......
  • 【考后总结】6 月西安多校模拟赛 3
    6.17冲刺国赛模拟20T1树染色容易发现每种方案都可以变成没有交边的链剖分,在此基础上的方案数是每个链顶的深度,考虑DP。直接DP大致是维护\(\prod(\proda+\prodb)\timesdep_{top}\),发现这个东西非常不好转移,转移时需要枚举叶子,复杂度不优秀。改为设\(f_{i,0/1}\)表......
  • farm (牛客多校) (二维树状+数学式子优化+rand()去除特殊情况)
    题目大意:给出一个n*m的田地矩阵,每个格子上种着一种植物。给格子施肥t次,每一次给出五个数字,x1,y1,x2,y2,k,要施肥的区域坐标和要施的肥料种类。如果植物和施肥种类不匹配,植物会死亡。问最终会死多少个植物。 思路:判断一个植物死不死, 判断植物种类*施肥次数==施肥种类总和某......
  • 2023冲刺国赛模拟20
    2023冲刺国赛模拟20越来越废物了。A.树染色\(f_{x,1/0}\)表示考虑\(x\)子树内,第一条链为黑色/白色,不考虑第一条链在子树外方案数的答案。转移枚举第一条链是哪个,用组合数给各个子树的链定序。code#include<bits/stdc++.h>usingnamespacestd;typedeflonglong......