首页 > 其他分享 > Codeforces Round 888 (Div. 3) 补题

Codeforces Round 888 (Div. 3) 补题

时间:2023-07-31 18:14:33浏览次数:43  
标签:memset idx int 888 Codeforces long 补题 Div sizeof

本题的题面保证了本题是个无环图,允许dfs函数会有出口,存图不能用链式前向图,因为非常容易构造数据使得为稠密图,所以用二维数组或vector数组或二维vector(注意区别,这三者不是一个东西)来存。

debug历程:(本题难度稍微上升可以感觉到封装函数的重要性,全局变量开太多会导致每轮都需要还原一堆变量)

  • 1.最重要的是递归函数一开写的不对,多考虑了一层,没有思考清楚dfs函数返回值的意义
  • 2.没分析数据范围,存图方式不对
  • 3.对于vector数组和二维vector混为一谈,导致clear的时候出错
  • 4.学会了使用cerr错误流来调试
// Problem: E. Nastya and Potions

// Contest: Codeforces - Codeforces Round 888 (Div. 3)
// URL: https://codeforces.com/contest/1851/problem/E
// Memory Limit: 256 MB
// Time Limit: 3000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
using namespace std;
# define int long long
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int>pii;
const int N = 2e5 + 10;
const int M = 4e5 + 10;
const int inf = 0x3f3f3f3f;
const int mod = 998244353;

int n, m;
int a[N];
int f[N];
vector<int>e[N];
//int h[N],e[M],ne[M],idx;
// void add (int a,int b){
	// e[idx]=b;
	// ne[idx]=h[a];
	// h[a]=idx++;
// }//稠密图不适合用邻接表
int dfs(int u){
	int &v=f[u];
	
	if(v!=-1)return v;
	v=0;
	for(int i=0;i<e[u].size();i++)v+=dfs(e[u][i]);
	v=min(v,a[u]);
	//cerr<<u<< " "<<v<<endl;
	return v;
}
signed main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(false);

    int t;
   cin>>t;

    while (t--) {
    
    	memset(f,-1,sizeof f);
    	// memset(h,-1,sizeof h);
    	// memset(e,0,sizeof e);
    	// memset(ne,0,sizeof ne);
    	memset(a,0,sizeof a);
    	//idx=0;
    	cin>>n;
    	for(int i=1;i<=n;i++)e[i].clear();
int k;
cin>>k;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=k;i++){
	int x;
	cin>>x;
	f[x]=0;
}
for(int i=1;i<=n;i++){
	int m;
	cin>>m;
	if(m==0&&f[i]==-1)f[i]=a[i];
	while(m--){
		int b;
		cin>>b;
		e[i].push_back(b);
	}
}
for(int i=1;i<=n;i++)cout<<dfs(i)<<" ";

cout<<endl;

    }
    return 0;
}

标签:memset,idx,int,888,Codeforces,long,补题,Div,sizeof
From: https://www.cnblogs.com/mathiter/p/17594101.html

相关文章

  • Codeforces Round 887 (Div. 2)
    CodeforcesRound887(Div.2)A.Desorting题目大意给出一个长度为\(n\)的数组\(a\),可以执行这个操作任意次。选择一下标\(i\),使得\(a_{1...i}\)加上\(1\),\(a_{i+1...n}\)减少\(1\)。问最少几次操作使得数组\(a\)无序。思路首先如果\(a\)原本就无序的......
  • Codeforces Round 888 (Div. 3)
    传送门AEscalatorConversations读懂题意即可/*Author:north_hFile:A.cppTime:2023/7/26/12:32____________||_||__||__|'_\/_\|'__|__|'_\|'_\|......
  • CF1855B Longest Divisors Interval 题解
    原题链接:https://codeforces.com/contest/1855/problem/B题意:给定一个正整数n,找到满足该条件的区间[l,r]的长度的最大值:对于任意l<=i<=r,n均为i的倍数(多组数据)。思路:如果n是奇数,答案显然是1,因为任意两个连续的正整数一定会有一个2的倍数。将这一结论进行推广:......
  • Codeforces Round 889 (Div. 2) C1 - C2
    Problem-C1-CodeforcesProblem-C2-Codeforces题意:​ 有\(n\)个数字,可以选择任意两个位置\(i,j\)进行操作,使得\(a_i=a_i+a_j\)(也即是把\(a_j\)加到\(a_i\)上),输出任意操作方案使得数组最后是不降的。esay-version要求在50次操作内完成,hard-version要求在31次操作内完成。......
  • Codeforces #889 div2 B
    B.LongestDivisorsInterval做法:假设我们找到了一个最大区间[l,r],这个区间的长度为k,那么这个区间里有一个数必定是k的倍数(自己举个例子就能知道了),因此n也是k的倍数。那么我们再缩小一下区间长度,变为k-1,这个区间可以是[l,r-1],也可以是[l+1,r],这其中必定有一个数是k-......
  • Codeforces Round 889 (Div. 2) 题解
    \(6\)题只做出来\(1\)题,损失惨重A.DaltontheTeacher显然,答案一定和最初的不满意人数有关,所以输入的时候统计一下然后,将不满意的人的座位每两个人交换一次即可,交换次数就是答案如果不满意人数是奇数,那么答案还要加\(1\)时间复杂度\(O(n)\)(输入的复杂度)B.LongestD......
  • CF1855B Longest Divisors Interval 题解
    题意:给定一个数\(n\),求一个连续区间\([l,r]\)使得\(n\)是区间内每个数的倍数,最大化这个区间的长度(多组数据)。思路:逆向思考一波,(如果一个数\(x\)不是\(n\)的因数,那么\(x\)的倍数不能在区间内。举个例子,比如$n$是13,3不是13的因数,\(3,6,9,12\)也就不可能出现......
  • Codeforces Round 889 (Div. 1) 题解
    A1.Dual(EasyVersion)https://codeforces.com/contest/1854/problem/A1题意给定一个长度为\(n\)的序列\(a_1,a_2,\dots,a_n\),你可以做以下操作:选定两个下标\(i,j(1\leqi,j\leqn)\),\(i,j\)可以相同,然后\(a_i\leftarrowa_{i}+a_j\)。要求构造一种操作......
  • Round 889 Div.2 意识流简记。
    太丢人了!D2D狂吃6发罚时,D2C都不会!不过无所谓,反正老年选手就是打着玩。D2A.答案为\(\lceil\frac{\sum_{i=1}^n[a_i=i]}{2}\rceil\)。D2B.我不会啊,猜了一下只需要枚举\(\le2000\)的,莫名其妙过了。D2C1/C2.不会。D2D.考虑动态维护前\(i\)个能凑出的数的集合,适时......
  • Codeforces Round 105 (Div. 2) - D. Bag of mice DP 或 记忆化搜索 求概率
    D.Bagofmice题意待补充~思路可利用DP或者记忆化搜索求解本问题,实际上这两个方法等价。当\(w=0\)时必输当$w\ne0$但$b=0$时必赢剩下的情况,先考虑一个问题:赢的局面是怎么构成的?代码记忆化搜索//>>>Qiansui#include<bits/stdc++.h>#definelllong......