首页 > 其他分享 >11.9 结题报告

11.9 结题报告

时间:2022-11-10 00:22:25浏览次数:55  
标签:ch 11.9 报告 int MAX p1 结题 readchar buf

T1

考场用时:\(40\) min
期望得分:\(100\) pts
实际得分:\(100\) pts
这题以前做过。
首先显然的一点是小 Y 行走的路径是一棵树,这题可以分两部分来做,首先对于每一个节点按照节点编号对于每一个终点升序排序。
然后对于 \(m=n-1\) 的部分是一棵树,直接 dfs 一遍即可,对于 \(m=n\) 的部分是一棵基环树,直接 dfs 找出这个环,然后枚举环上不走的那条边即可,复杂度 \(O(n^2)\) 可以接受。

#include<bits/stdc++.h>
#define ll long long
//#define int long long
using namespace std;
const int MAX=5e3+10;
const int MOD=998244353;
inline char readchar() {
	static char buf[100000], *p1 = buf, *p2 = buf;
	return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1++;
}
inline int read() {
#define readchar getchar
	int res = 0, f = 0;
	char ch = readchar();
	for(; !isdigit(ch); ch = readchar()) if(ch == '-') f = 1;
	for(; isdigit(ch); ch = readchar()) res = (res << 1) + (res << 3) + (ch ^ '0');
	return f ? -res : res;
}
inline void write(int x) {
    if(x<0){putchar('-');x=-x;}
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
vector<int> s[MAX];
int vis[MAX],fa[MAX],dfn[MAX],cnt,huan[MAX],tot,mn=1,res=1e9;
int cut1,cut2,ans[MAX],a[MAX],cnt2,n,m;
void dfs(int f,int k){
	a[++cnt2]=k;
	for(int v:s[k]){
		if(v==f||((k==cut1&&v==cut2)||k==cut2&&v==cut1)) continue;
		dfs(k,v);
	}
	return ;
}
void fid(int f,int k){
	dfn[k]=++cnt;fa[k]=f;
	for(int v:s[k]){
		if(v==f) continue;
		if(dfn[v]){
			if(dfn[v]<dfn[k]) continue;
			huan[++tot]=v;
			for(;k!=v;v=fa[v])
				huan[++tot]=fa[v];
//			for(int i=1;i<=tot;i++) cout<<huan[i]<<" ";
			return ;
		}
		fid(k,v);
	}
	return ;
}
bool check(){
	for(int i=1;i<=n;i++){
		if(a[i]<ans[i]) return true;
		if(a[i]>ans[i]) return false;
	}
	return false;
}
signed main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++) ans[i]=n-i+1;
	for(int i=1;i<=m;i++){
		int u=read(),v=read();
		s[u].push_back(v);
		s[v].push_back(u);
	}
	for(int i=1;i<=n;i++) sort(s[i].begin(),s[i].end());
	if(m==n){
		fid(0,1);
		for(int i=1;i<tot;i++){
			cut1=huan[i];
			cut2=huan[i+1];
			dfs(0,1);
			if(check()) for(int j=1;j<=n;j++) ans[j]=a[j];
			cnt2=0;
		}
		cut1=huan[tot],cut2=huan[1];
		dfs(0,1);
		if(check())
		{
			for(int i=1;i<=n;i++) ans[i]=a[i];
			cnt2=0;
		}
	}
	else{
		dfs(0,1);
		for(int i=1;i<=n;i++) ans[i]=a[i];
	}
	for(int i=1;i<=n;i++) cout<<ans[i]<<" ";
	return 0;
}

T2

考场用时:\(2。5\) h
期望得分:\(20\) pts
实际得分:\(20\) pts
这 \(2.5\) 小时其中有两个小时是本地挂暴力打表的,考场写了一个 \(O(2^{nm}C_{n+m}^n)\) 的大暴力,本地跑了两小时跑出了 \(6\times 6\) 的除 \((6,6)\) 以外的所有答案,得到了这20pts。

T3

考场用时:\(1.5\) h
期望得分:\(44\) pts
实际得分:\(44\) pts
直接暴力 dp,\(dp[i][0/1]\) 表示满足/不满足第 \(i\) 个国王的要求时的最小开销,那么 \(dp[i][0]=\sum dp[son[i]][1]\),\(dp[i][1]=c[i]+\sum \min(dp[son[i]][0],dp[son[i]][1])\)。

#include<bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;
const int MAX=1e5+10;
const int MOD=998244353;
inline char readchar() {
	static char buf[100000], *p1 = buf, *p2 = buf;
	return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1++;
}
inline int read() {
#define readchar getchar
	int res = 0, f = 0;
	char ch = readchar();
	for(; !isdigit(ch); ch = readchar()) if(ch == '-') f = 1;
	for(; isdigit(ch); ch = readchar()) res = (res << 1) + (res << 3) + (ch ^ '0');
	return f ? -res : res;
}
inline void write(int x) {
    if(x<0){putchar('-');x=-x;}
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
int cnt,val[MAX],dp[MAX][2],head[MAX];
struct node{int u,v,next;}edge[MAX<<1];
void add(int u,int v){
	edge[++cnt]=(node){u,v,head[u]};
    head[u]=cnt;
    return ; 
}
int n,m;string s; 
void dfs(int now,int fa){
    dp[now][1]+=val[now];
    for(int i=head[now];i;i=edge[i].next){
        int v=edge[i].v;
        if(v==fa)  continue;
        dfs(v,now);
        dp[now][0]+=dp[v][1];
        dp[now][1]+=min(dp[v][0],dp[v][1]);
    }
}
signed main(){
    n=read(),m=read();
    cin>>s;
    for(int i=1;i<=n;++i) val[i]=read();
    for(int i=1;i<n;++i){
        int u=read(),v=read();
        add(u,v),add(v,u);
    }
    while(m--){
        memset(dp,0,sizeof(dp));
        int a=read(),x=read(),b=read(),y=read();
        if(x==1)  dp[a][0]=1e18;
        else dp[a][1]=1e18;
        if(y==1)  dp[b][0]=1e18;
        else dp[b][1]=1e18;
        dfs(1,0);
        if(min(dp[1][0],dp[1][1])>=1e18)  puts("-1");
        else cout<<min(dp[1][1],dp[1][0])<<endl;
    }
    return 0;
}

标签:ch,11.9,报告,int,MAX,p1,结题,readchar,buf
From: https://www.cnblogs.com/wapmhac/p/16875697.html

相关文章

  • 2022.11.9
    ###noip模拟为什么一点儿进步都没有啊。。。怎么还越来越菜了。。。。。。  ##出错点t1:MLE。。。。。。也是挺牛t4://intans=0;longlongans=0;//n*n啊不......
  • 11.9总结
    11.9GZEZNOIP2022模拟测试赛(五十七)PROBLEMA:[精神焕发(huan)]题面描述:给你一颗树,每个点可以回血,经过一次回血\(w[i]\)(有正有负)\(q\)次询问:给出\(x,s,t\)......
  • 报告分享|2022年人工智能行业研究最新动态
    报告链接:http://tecdat.cn/?p=30144原文出处:拓端数据公众号随着人工智能技术发展步入快车道,业务数量和覆盖面不断提升,新业务模式和新产品持续涌现。人工智能行业这些热......
  • 袋鼠云产品功能更新报告02期丨有亿点点走心!
    不知不觉间,2022年的脚步已经走到了倒数第二个月。临近年末,我们对产品本身以及客户反馈的一些问题进行了持续的更新和优化,例如基线告警、数据服务平台新增TDengine数据源支......
  • python实验报告(第十章)
    一、实验目的1.掌握基本的文件操作2.掌握目录操作3.掌握高级文件操作二、实验环境python版本:3.10(64-bit)三、实验内容1.实例一:  实验结果:  2.实例二:  ......
  • OpenHarmony社区运营报告(2022年10月)
     本月快讯●《深圳市推动软件产业高质量发展的若干措施》于10月24日发布。●社区共发展逾5000位贡献者累计为社区提交超过11万个PR,深圳市优博终端科技有限公司(以下......
  • report 鼠标键盘报告描述符测试
     0x05,0x01,//USAGE_PAGE(GenericDesktop)0x09,0x06,//USAGE(Keyboard)0xa1,0x01,//COLLECTION(Application)0x85,0x01,//ReportID(1)......
  • 11.8 解题报告
    T1考场用时:\(20\)min期望得分:\(100\)pts实际得分:\(100\)pts求出所有上升子段,答案即为每个子段内第一个与最后一个深度差,注意第一个和最后一个要特殊处理。#include......
  • P4555 最长双回文串 解题报告
    看到回文串,于是就想到了马拉车。马拉车可以帮我们求出每个\(i\)的最大扩展距离,容易得出,双回文串就是两个回文串拼一起。当然,两个回文串必须要相交,不然形不成一个字符串......
  • Jmeter之聚合报告“造假”
    通过Jmeter,模拟一个“虚假”的聚合报告,可“应付”日常现场项目的性能测试验收。本文档着重介绍jmeter的固定定时器,通过设置随机的延迟时间(如想业务场景对应事务的响应时间......