2022杭电第六场

1006 Maex

题意

给定一棵n个节点的树,给每个节点标上0~n-1的权重,求各子树MEX和的最大值

思路

易知MEX的最大值有一条链构成,统计子树大小然后从上往下去搜索每个叶子即可。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
const int N=5e5+10;
vector<ll> v[N];
ll son[N],siz1[N];
ll dfss(int u,int fa){
	son[u]=1;
	for(auto y:v[u]){
		if(y==fa) continue;
		
		son[u]+=dfss(y,u);
	}
    return son[u];
}
ll dfs(int u,int fa){
	
	siz1[u]=1;
	
	for(auto y:v[u]){
		
		if(y==fa) continue;
		siz1[u]=max(siz1[u],son[u]+dfs(y,u));
	}
    return siz1[u];
}

void solve(){
	memset(son,0,sizeof son);
	memset(siz1,0,sizeof siz1);
    for(int i=1;i<=n;i++) v[i].clear();
	cin>>n;
	for(int i=1;i<n;i++){
		int a,b;
		cin>>a>>b;
		v[a].push_back(b);
		v[b].push_back(a);
	}
	dfss(1,0);
	dfs(1,0);
	cout<<siz1[1]<<endl;
}
int main()
{
	cin.tie(0);
	ios::sync_with_stdio(false);
	int t;
	cin>>t;
	while(t--){
		solve();
	}

}


1009 Map

题意

给定大矩形和按比例缩小的小矩形,其中有一个两个矩形对应相同的点P,小矩形绕点P旋转,给定大矩形和旋转后的小矩形顶点坐标求P点坐标。

思路

看大矩形,以AB,AD两条互相垂直的边作为坐标轴,能表示出所有的点 即

AP\vec{AP}=μAB\mu\vec{AB}+λAD\lambda\vec{AD};

同理小矩形也是如此:

aP\vec{aP}=μab\mu\vec{ab}+λad\lambda\vec{ad};

联立得:μ(ABab)\mu(\vec{AB}-\vec{ab})+λ(ADad)\lambda(\vec{AD}-\vec{ad})=aA\vec{aA}

求出μ\muλ\lambda,P也可以求出

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
int X[4], Y[4];
int x[4], y[4];
int cross(int a1, int a2, int a3, int a4) {
  return a1 * a4 - a2 * a3;
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int T;
  cin >> T;
  while (T--) {
    for (int i = 0; i < 4; i++) cin >> X[i] >> Y[i];
    for (int i = 0; i < 4; i++) cin >> x[i] >> y[i];
    int Ux = X[3] - X[0], Uy = Y[3] - Y[0];
    int Vx = X[1] - X[0], Vy = Y[1] - Y[0];
    int ux = x[3] - x[0], uy = y[3] - y[0];
    int vx = x[1] - x[0], vy = y[1] - y[0];
    double p = cross(X[0] - x[0], vx - Vx, Y[0] - y[0], vy - Vy) / (double)cross(ux - Ux, vx - Vx, uy - Uy, vy - Vy);
    double q = cross(ux - Ux, X[0] - x[0], uy - Uy, Y[0] - y[0]) / (double)cross(ux - Ux, vx - Vx, uy - Uy, vy - Vy);
    cout << fixed << setprecision(10) << x[0] + p * ux + q * vx << ' ' << y[0] + p * uy + q * vy << endl; 
  } 
  return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务