A

拓扑排序+倍增哈希

或者

拓扑排序对于每个点计一个rank,每个点优先选取rank靠前的最小边权点

每次依然按照rank排序更新rank

#include<bits/stdc++.h>
using namespace std; template <typename T> void chmax(T &x,const T &y)
{
if(x<y)x=y;
}
template <typename T> void chmin(T &x,const T &y)
{
if(x>y)x=y;
}
typedef long long s64;
typedef unsigned long long u64;
typedef pair<int,int> pii; #define rep(i,l,r) for(int i=l;i<=r;++i)
#define per(i,r,l) for(int i=r;i>=l;--i) int rand_32()
{
return (RAND_MAX<=32768)?(rand()*32768+rand()):rand();
}
u64 rand_64()
{
return ((u64)rand_32()<<30)+rand_32();
} const int N=1e6+5,L=20,D=998244353;
vector<pii>lk[N],nlk[N];
int to_fa[N];
int fa[N][L];u64 h[N][L];
int f[N];s64 g[N];
u64 w1[L],w2[L]; int du[N],q[N]; int smaller(int x,int y)
{
per(j,L-1,0)
if(h[x][j]==h[y][j])
{
x=fa[x][j];y=fa[y][j];
}
return to_fa[x]<to_fa[y];
} int main()
{
// freopen("1.in","r",stdin);freopen("std.out","w",stdout);
int n,m;
cin>>n>>m;
rep(i,0,L-1){w1[i]=rand_64();w2[i]=rand_64();}
rep(i,1,m)
{
int x,y,w;
scanf("%d%d%d",&x,&y,&w);
lk[x].push_back(pii(y,w));
nlk[y].push_back(pii(x,w));
++du[x];
}
//cerr<<clock()<<endl;
int tail=0;
rep(x,1,n)
if(!du[x])q[++tail]=x;
rep(head,1,tail)
{
int x=q[head];
for(auto pr:nlk[x])
{
int y=pr.first;
if(!--du[y])q[++tail]=y;
}
if(lk[x].empty())continue;
for(auto pr:lk[x])
{
int y=pr.first,w=pr.second;
chmax(f[x],f[y]+1);
}
to_fa[x]=1e9;
for(auto pr:lk[x])
{
int y=pr.first,w=pr.second;
if(f[x]==f[y]+1)chmin(to_fa[x],w);
}
for(auto pr:lk[x])
{
int y=pr.first,w=pr.second;
if(f[x]==f[y]+1&&to_fa[x]==w)
if(!fa[x][0]||smaller(y,fa[x][0]))fa[x][0]=y;
}
g[x]=29*(g[fa[x][0]]+to_fa[x])%D;
rep(j,1,L-1)fa[x][j]=fa[fa[x][j-1]][j-1];
h[x][0]=to_fa[x];
rep(j,1,L-1)h[x][j]=(h[x][j-1]^w2[j])*w1[j]+h[fa[x][j-1]][j-1];
}
//cerr<<clock()<<endl;
//cerr<<cnt<<endl;
rep(x,1,n)
if(du[x])puts("Infinity");
else printf("%d\n",int(g[x]));
}

B

概率dp

对于个人的每个mx的每个选项考虑

#include<map>
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define rep(a,b,c) for(int a = b; a <= c;++ a)
#define per(a,b,c) for(int a = b; a >= c; -- a)
#define gc getchar()
#define pc putchar
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9') c = getchar();
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f;
}
void print(int x) {
if(x < 0) {
putchar('-');
x = -x;
}
if(x >= 10) print(x / 10);
putchar(x % 10 + '0');
}
#define LL long long
const int mod = 998244353;
const int maxn = 2007;
int n;
int P[maxn][4],W[4][4];
LL ans[maxn];
LL f[maxn],g[maxn]; // all / base x
inline void m(LL &x) {
x = x >= mod ? x - mod : x;
}
inline int fstpow(int x,int k) {
int ret = 1;
for(;k;k >>= 1,x = 1ll * x * x % mod)
if(k & 1) ret = 1ll * ret * x % mod;
return ret;
}
void solve(int mx) {
memset(f,0,sizeof f);
f[0] = 1;
rep(i,1,n) {
LL p = P[i][mx];
per(j,i,1)
f[j] = (f[j - 1] * p % mod + f[j] * (1 + mod - p) % mod) % mod;
f[0] = f[0] * (1 + mod - p) % mod;
}
rep(i,1,n) {
LL p = P[i][mx];
if(p != 1) {
LL inv = fstpow(mod + 1 - p,mod - 2);
g[0] = 1ll * f[0] * inv % mod;
rep(j,1,n) g[j] = 1ll * (f[j] - 1ll * p * g[j - 1] % mod) * inv % mod;
}
else
{rep(j,0,n - 1) g[j] = f[j + 1];g[n] = 0; }
LL sum = 0;
rep(j,n / 2 + 1,n) sum += g[j];
sum %= mod;
rep(j,0,3) (ans[i] += 1ll * W[mx][j] * P[i][j] % mod * (sum + (mx == j ? g[n / 2] : 0)) % mod) %= mod;
}
}
int main() {
n = read();
rep(i,1,n)
P[i][0] = read(),P[i][1] = read(),P[i][2] = read(),P[i][3] = read();
rep(i,0,3)
W[i][0] = read(),W[i][1] = read(),W[i][2] = read(),W[i][3] = read();
rep(i,0,3) solve(i);
for(int i = 1;i <= n;++ i) print((ans[i] % mod + mod) % mod),pc('\n');
return 0;
}

Nowcoder牛客网NOIP赛前集训营-提高组(第六场)的更多相关文章

  1. 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告

    目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...

  2. 牛客网NOIP赛前集训营-提高组(第二场)A 方差

    链接:https://www.nowcoder.com/acm/contest/173/A来源:牛客网 题目描述 一个长度为 m 的序列 b[1...m] ,我们定义它的方差为 ,其中  表示序列的平 ...

  3. [牛客网NOIP赛前集训营-提高组(第一场)]C.保护

    链接:https://www.nowcoder.com/acm/contest/172/C来源:牛客网 题目描述 C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为 ...

  4. 牛客网NOIP赛前集训营-提高组(第一场)

    牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l ...

  5. [NowCoder]牛客网NOIP赛前集训营-提高组(第七场)

    链接 A.中国式家长2 模拟题,毫无坑点 #include<bits/stdc++.h> #define REP(i,a,b) for(int i(a);i<=(b);++i) #d ...

  6. [NowCoder]牛客网NOIP赛前集训营-提高组(第六场)题解

    A.最长路 题意:给定有向图,每条边有个字符\([0,10^9]\),求每个点最长路字典序最小的方案.\(N,M\le 10^6\) 建反图跑拓扑排序,显然入过队的点都有最长路,考虑如何判断字典序大小 ...

  7. 比赛总结——牛客网 NOIP赛前集训营提高组模拟第一场

    第一场打的很惨淡啊 t1二分+前缀最小值没想出来,20分的暴力也挂了,只有10分 t2数位dp,调了半天,结果因为忘了判0的特殊情况WA了一个点,亏死 t3emmmm.. 不会 imone说是DSU ...

  8. 牛客网NOIP赛前集训营-提高组(第一场)B 数数字

    数数字 思路: 数位dp 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include< ...

  9. 牛客网NOIP赛前集训营-提高组(第一场)A 中位数

    中位数 思路: 二分答案 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include< ...

随机推荐

  1. CentOS6.8安装MySQL5.7.20时报Curses library not found解决

    报错如下: CMakeErroratcmake/readline.cmake:83(MESSAGE): Curseslibrarynotfound.Pleaseinstallappropriatepa ...

  2. Datagrip导入导出为一个sql文件详细说明 (mysql)

    Datagrip导入导出为一个sql文件详细说明 导出: (我的无法截图, 借用一张) 导入: (我的无法截图, 再借用一张) 完

  3. 论文阅读笔记二-ImageNet Classification with Deep Convolutional Neural Networks

    分类的数据大小:1.2million 张,包括1000个类别. 网络结构:60million个参数,650,000个神经元.网络由5层卷积层,其中由最大值池化层和三个1000输出的(与图片的类别数相同 ...

  4. 开启Java之旅

    学习应用系统的服务器开发,也许并不算什么“旅行”,也不会那么‘愉快’.但是,我希望这次能够同以往有所不同,更加努力地学习J2EE. 从2月份开始,从事web前端开发,并在公司的的项目中,独立完成了4个 ...

  5. 饮冰三年-人工智能-linux-07 硬盘分区、格式化及文件系统的管理

    先给虚拟机添加一个硬盘 通过fdisk -l sdb,查看磁盘内容 通过fdisk /sdb 来操作分区 创建一个新分区 创建第二个分区 创建第三个分区 创建扩展分区 再次创建分区,其实使用的是扩展分 ...

  6. pycharm常用设置和快捷键大全

    pycharm常用快捷键 1.编辑(Editing) Ctrl + Space    基本的代码完成(类.方法.属性)Ctrl + Alt + Space  快速导入任意类Ctrl + Shift + ...

  7. C#算法 选择排序、冒泡排序、插入排序

    1.冒泡排序: 方法一: public static int[] MaoPao(int[] arr) { //执行多少次 for (int i = 0; i < arr.Length; i++) ...

  8. 全球免费公共 DNS 解析服务器 IP 地址列表推荐 (解决无法上网/加速/防劫持)

    除了宽带提供商的 DNS 以外,像阿里云.腾讯云.Google.百度.IBM.CNNIC 等一些有足够实力的大型互联网公司也非常慷慨地为公众提供了免费的 DNS 解析服务器.异次元这就搜集了全球范围内 ...

  9. [LeetCode] Best Time to Buy and Sell Stock 6道合集【DP】

    1. Best Time to Buy and Sell Stock 2. Best Time to Buy and Sell Stock II 3. Best Time to Buy and Sel ...

  10. .NET轻量级任务管理类

    概述 最近做项目总是遇到服务跑批等需求,一直想写个任务管理的DLL,现在整理了一下思路,编写了一个DLL类库,使用方便.只要调用的子类继承服务基类便可以实现任务的整体调度.先看看页面效果: 使用方式 ...