首页 > 其他分享 >"蔚来杯"2022牛客暑期多校训练营5

"蔚来杯"2022牛客暑期多校训练营5

时间:2022-09-07 15:56:23浏览次数:70  
标签:int 蔚来 ll 多校 long 牛客 maxn len 节点

A Don't Starve

巧妙在于拓扑排序 为啥要开滚动数组 因为对于长度相同的边 我们只能选择一条 而这些边属于同一个状态的 为了防止更新的时候对同状态的点造成影响

#include<bits/stdc++.h>
using namespace std;
int i,j,k,l,n,m,f[2005],g[2005];
struct op
{
	int x,y;
}s[100001];
struct ex
{
	int a,b;
	long long len;
}w[4000005];
bool cmp(ex x,ex y)
{
	return x.len<y.len;
}
int main()
{
	cin>>n;
	for (i=1;i<=n;i++) 
	{
		cin>>s[i].x>>s[i].y;
		w[++m].a=i;w[m].b=0;w[m].len=s[i].x*s[i].x+s[i].y*s[i].y;
	}
	for (i=1;i<=n;i++)
	  for (j=1;j<=n;j++)
		if (i!=j){ 
		    w[++m].a=i;w[m].b=j;
		    w[m].len=(s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y);
	    }
	sort(w+1,w+m+1,cmp);
	for (i=1;i<=m;i=j)
	{
		j=i;
		while (j<=m&&w[i].len==w[j].len) j++;
		for (k=i;k<j;k++) f[w[k].b]=max(g[w[k].a]+1,f[w[k].b]);
		for (k=i;k<j;k++) g[w[k].b]=max(g[w[k].b],f[w[k].b]);
	}
	cout<<g[0];
}

D Birds in the tree

如果当前点的颜色和当前考虑的颜色相同 则当前点也可以作为根节点度数为1

如果不相同 那么当前点作为根节点一定度数不能为1 所以就要减去作为根节点度数为1的所有情况

总结一下:

求连通子图的方案数 可以考虑分别以各个点为根节点 这样所有的连通子图就能考虑到了

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
const int maxn=3e5+5;
const int mod=1e9+7;
ll dp[maxn][2],ans;
int a[maxn];
vector<int>Q[maxn];
int n;
ll dfs(int u,int fa,int now){
	ll mul=1,sum=0;
	for(int i=0;i<Q[u].size();i++){
		int to=Q[u][i];
		if(to==fa)continue;
		dfs(to,u,now);
		mul=mul*(dp[to][now]+1)%mod;
		sum=(sum+dp[to][now])%mod;
	}
	dp[u][now]=(mul-1+(a[u]==now)+mod)%mod;
	if(now==a[u])
	ans=(ans+dp[u][now])%mod;
	else 
	ans=(ans+dp[u][now]-sum+mod)%mod;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)scanf("%1d",&a[i]);
    for(int i=1,u,v;i<n;i++){
    	scanf("%d%d",&u,&v);
    	Q[u].push_back(v);
    	Q[v].push_back(u);
	}
	dfs(1,1,1);
	dfs(1,1,0);
	cout<<ans<<endl;
	return 0;
}

标签:int,蔚来,ll,多校,long,牛客,maxn,len,节点
From: https://www.cnblogs.com/wzxbeliever/p/16665745.html

相关文章

  • "蔚来杯"2022牛客暑期多校训练营7
    A.FloorTilesinaPark给定\(W\timesH\)的矩阵,问将其分为\(k(k\leqslant5)\)个子矩阵的方案数。两个方案不同,当且仅当其切割方式不同手玩,画出所有\(k\leqslant5\)......
  • "蔚来杯"2022牛客暑期多校训练营9
    A CarShow题意:给定一个数组,请找到有多个区间[L,R]满足1到m的数都出现过。分析:直接双指针就好#include<bits/stdc++.h>usingnamespacestd;longlongn,m,s[......
  • Slayers Come (区间覆盖种类数(dp+线段树)+ st表+二分,或者线段树) (2022杭电多校2)
    题目;给你一个长度为n的数组,每个位置上有一个野怪,野怪的攻击力和血量已知,你有m个技能,每个技能有三个值,一是可以击败的怪物,且怪物死后会攻击与它相邻的怪对于左边的怪伤害......
  • Static Query on Tree (述链剖分+线段树)(2022杭电多校)
    题意:给定一棵树,nn 个结点。根为 11,所有的结点只能走向其父亲结点。有 qq 次询问,每次询问给出 33 个结点集合 A,B,CA,B,C。问树上有多少点满足如下条件:该点可以......
  • DOS Card (线段树)(hud杭电多校)
    题目:对序列 a,回答 q 次询问:给定长度至少为 4 的区间 [L,R],在区间内选择 1对 (ai,aj)(L≤i<j≤R)可以获取分数 (ai+aj)(ai−aj) ,计算选择 2 对可以获取的最......
  • copy (倒叙离线+bitset+^特性) (hud 2022多校 2)
    题目:给定一个序列 a1,a2,…,an,共有 q 次操作,每次操作有两种类型:操作1(1,l,r) 表示复制区间 [l,r] 的内容,在区间 [l,r]的末尾处插入这段内容。操作2(2,x) 询问......
  • "蔚来杯"2022牛客暑期多校训练营7
    CConstructiveProblemsNeverDie题意:给你一个数组A,你需要构造一个排列P,使得P[i]≠A[i]分析:考虑构造不出来的情况如果所有A[i]都相同一定不成立先构造P[i]=i......
  • 牛客dfs专题 NC13594 选择困难症(dfs+剪枝)
    链接:https://ac.nowcoder.com/acm/problem/13594来源:牛客网题目描述有k类物品,每类物品的个数为Ai,每个物品有一个喜欢值Vj,代表小L对这件物品的喜欢程度。小L想知道,有多......
  • 牛客dfs专题:轰炸区最优选取(二维前缀和)
    链接:https://ac.nowcoder.com/acm/problem/14505来源:牛客网题目描述现在给出一个正方形地图,其边长为n,地图上有的地方是空的,有的地方会有敌人。我们现在有一次轰炸敌人......
  • 牛客练习赛102
    A清楚姐姐的学术群intmain(){ intn=read(),m=read(),a=read(),b=read(); for(inti=1;i<=n;i++)people[i].push_back(0); for(inti=1;i<=......