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. Metasploit渗透测试模块(一)

    1.Metasploit模块加载 初始化界面,成功要加载数据库 查看 Metasploit中已近存在的漏洞模块使用 show payloads

  2. AI学习吧

    一:AI学习吧 项目描述 系统使用前后端分离的模式,前端使用vue框架,后端使用restframework实现. 项目需求 公司开发AI学习吧,由于公司需要一款线上学习平台,要开发具有线上视频学习.支 ...

  3. C#的值传递与引用传递

    值传递:在使用值传递时,是把变量的值传给函数,函数中对此变量的任何修改都不影响该变量本身的值. 引用传递:使用引用传递时,在函数中对此变量的修改会影响变量的值. 说简单点,值传递,就是我把身份证复印件 ...

  4. 20165206 2017-2018-2 《Java程序设计》第三周学习总结

    20165206 2017-2018-2 <Java程序设计>第三周学习总结 教材学习内容总结 类:class是关键字,用来定义类. 类声明:例如class People. 对象的声明:类 ...

  5. 【第一部分】10Leetcode刷题

    一.删除链表的倒数第N个节点 题目:19. Remove Nth Node From End of List 分析:典型的利用双指针法解题.首先让指针first指向头节点,然后让其向后移动n步,接着让 ...

  6. LeetCode-450 二叉搜索树删除一个节点

    二叉搜索树 建树 删除节点,三种情况,递归处理.左右子树都存在,两种方法,一种找到左子树最大节点,赋值后递归删除.找右子树最小同理 class Solution { public: TreeNode* ...

  7. GGTalk ——C#开源即时通讯系统

    http://www.cnblogs.com/justnow/ GGTalk ——C#开源即时通讯系统 下载中心   GGTalk(简称GG)是可在广域网部署运行的QQ高仿版,2013.8.7发布GG ...

  8. Codeforces 802I Fake News (hard) (SA+单调栈) 或 SAM

    原文链接http://www.cnblogs.com/zhouzhendong/p/9026184.html 题目传送门 - Codeforces 802I 题意 求一个串中,所有本质不同子串的出现次 ...

  9. 如何删除github里面的项目

    第一步 :首先登陆github 第二步:如下图选择 第三步:选择如下图 第四步:点击你要删除的项目,点击settings 第五步:把页面向下拉,找到如图按钮并点击 第六步:需要确认输入你要删除的项目名 ...

  10. spring ,springmvc,mybatis 最基本的整合,没有多余的jar包和依赖 2018.9.29日

    最基本的ssm框架整合 本案例采用2018商业版intellij  idea  编辑器    maven项目管理工具  tomcat8.5 接着上一篇使用springmvc最基本配置开始 https: ...