[Nowcoder] 有向无环图 | 拓扑排序简单应用

简介: 题目描述Bobo 有一个 n 个点,m 条边的 有向无环图 (即对于任意点 v,不存在从点 v 开始、点 v 结束的路径)。为了方便,点用 1 , 2 , … , n编号。设count(x,y) 表示点 x 到点 y 不同的路径数量(规定count(x,x)=0,Bobo 想知道∑i=1n∑j=1ncount(i,j)⋅ai⋅bj除以( 1 0 9 + 7 ) 的余数。其中,a i , b j 是给定的数列。

链接


题目描述


Bobo 有一个 n 个点,m 条边的 有向无环图 (即对于任意点 v,不存在从点 v 开始、点 v 结束的路径)。

为了方便,点用 1 , 2 , … , n编号。

设count(x,y) 表示点 x 到点 y 不同的路径数量(规定count(x,x)=0,Bobo 想知道

i=1nj=1ncount(i,j)aibj

除以( 1 0 9 + 7 ) 的余数。

其中,a i , b j 是给定的数列。


输入描述:


输入包含不超过 15 组数据。

每组数据的第一行包含两个整数 n, m  (1 ≤ n , m ≤ 105  

接下来 n 行的第 i 行包含两个整数 a i , b i

(0ai,bi109 ).

最后 m 行的第 i 行包含两个整数 ui , vi ,代表一条从点 ui 到 vi 的边(1ui,vin)


输出描述:


对于每组数据,输出一个整数表示要求的值。


示例1


输入

3 3
1 1
1 1
1 1
1 2
1 3
2 3


输出

4


示例2


输入

2 2
1 0
0 2
1 2
1 2


输出

4


示例3


输入

2 1
500000000 0
0 500000000
1 2


输出

250000014


因为是DAG图,重要的是不存在环,所以说这道题我们可以通过 拓扑排序 来操作,在拓扑排序的过程中,先将队列里将要pop()的元素u 加上a[u],然后再从遍历所连边的时候,考虑贡献变化,然后用res记录

#define Clear(x,val) memset(x,val,sizeof x)
struct node {
  int u,v,nex;
}e[maxn];
int n,m;
int cnt,head[maxn];
ll a[maxn],b[maxn];
int deg[maxn];
ll ans[maxn];
void init() {
  cnt = 0;
  Clear(head,-1);
  Clear(ans,0);
  Clear(deg,0);
}
void add(int u,int v){
  e[cnt].u = u;
  e[cnt].v = v;
  e[cnt].nex = head[u];
  head[u] = cnt ++;
}
ll res;
void topoSort(){
  queue<int> que;
  for(int i=1;i<=n;i++){
    if(deg[i] == 0) que.push(i);
  }
  while(que.size()){
    int u = que.front();
    que.pop();
    ans[u] = (ans[u] + a[u]) % mod;
    for(int i = head[u];~i;i = e[i].nex){
      int to = e[i].v;
      ans[to] = (ans[to] + ans[u]) % mod;
      res += ans[u] * b[to];
      res %= mod;
      -- deg[to];
      if(deg[to] == 0) que.push(to);
    }
  }
}
int main() {
  while(cin >> n >> m) {
    init();
    for(int i = 1;i <= n;i ++){
      a[i] = read,b[i] = read;
    }
    for(int i = 1;i <= m;i ++){
      int u = read,v = read;
      add(u,v);
      deg[v] ++;
    }
    res = 0;
    topoSort();
    cout << res << endl;
  }
  return 0;
}
/**
**/




目录
相关文章
|
存储 Linux API
huggingface.datasets无法加载数据集和指标的解决方案
本文是作者在使用huggingface的datasets包时,出现无法加载数据集和指标的问题,故撰写此博文以记录并分享这一问题的解决方式。以下将依次介绍我的代码和环境、报错信息、错误原理和解决方案。首先介绍数据集的,后面介绍指标的。
huggingface.datasets无法加载数据集和指标的解决方案
|
机器学习/深度学习 人工智能 自然语言处理
简述人工智能,及其三大学派:符号主义、连接主义、行为主义
简述人工智能,及其三大学派:符号主义、连接主义、行为主义
4225 0
简述人工智能,及其三大学派:符号主义、连接主义、行为主义
|
机器学习/深度学习 自然语言处理 算法
【Transformer系列(1)】encoder(编码器)和decoder(解码器)
【Transformer系列(1)】encoder(编码器)和decoder(解码器)
4526 0
【Transformer系列(1)】encoder(编码器)和decoder(解码器)
|
设计模式 前端开发 Java
从Langchain到ReAct,在大模型时代下全新的应用开发核心
什么是ReAct框架关于什么是langchain,在使用langchain的过程中,大模型给人留下最深刻的印象无疑是Agent功能。大模型会自己分析问题,选择合适的工具,最终解决问题。这个功能背后的原理就是来自ReAct框架。ReA
15983 2
从Langchain到ReAct,在大模型时代下全新的应用开发核心
|
20天前
|
存储 人工智能 测试技术
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
141061 20
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
|
19天前
|
人工智能 运维 前端开发
基于阿里百炼的DeepSeek-R1满血版模型调用【零门槛保姆级2084小游戏开发实战】
本文介绍基于阿里百炼的DeepSeek-R1满血版模型调用,提供零门槛保姆级2048小游戏开发实战。文章分为三部分:定位与核心优势、实战部署操作指南、辅助实战开发。通过详细步骤和案例展示,帮助开发者高效利用DeepSeek-R1的强大推理能力,优化游戏逻辑与视觉效果,解决官网响应延迟问题,提升开发效率和用户体验。适合企业开发者、教育行业及多模态探索者使用。
70896 17
基于阿里百炼的DeepSeek-R1满血版模型调用【零门槛保姆级2084小游戏开发实战】
|
27天前
|
人工智能 自然语言处理 Shell
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
仅用3分钟,百炼调用满血版Deepseek-r1 API,享受百万免费Token。阿里云提供零门槛、快速部署的解决方案,支持云控制台和Cloud Shell两种方式,操作简便。Deepseek-r1满血版在推理能力上表现出色,尤其擅长数学、代码和自然语言处理任务,使用过程中无卡顿,体验丝滑。结合Chatbox工具,用户可轻松掌控模型,提升工作效率。阿里云大模型服务平台百炼不仅速度快,还确保数据安全,值得信赖。
358010 62
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
|
23天前
|
人工智能 自然语言处理 API
快速使用 DeepSeek-R1 满血版
DeepSeek是一款基于Transformer架构的先进大语言模型,以其强大的自然语言处理能力和高效的推理速度著称。近年来,DeepSeek不断迭代,从DeepSeek-V2到参数达6710亿的DeepSeek-V3,再到性能比肩GPT-4的DeepSeek-R1,每次都带来重大技术突破。其开源策略降低了AI应用门槛,推动了AI普惠化。通过阿里云百炼调用满血版API,用户可以快速部署DeepSeek,享受高效、低成本的云端服务,最快10分钟完成部署,且提供免费token,极大简化了开发流程。
191010 23
快速使用 DeepSeek-R1 满血版
|
8天前
|
人工智能 搜索推荐 数据可视化
Manus:或将成为AI Agent领域的标杆
随着人工智能技术的飞速发展,AI Agent(智能体)作为人工智能领域的重要分支,正逐渐从概念走向现实,并在各行各业展现出巨大的应用潜力。在众多AI Agent产品中,Manus以其独特的技术优势和市场表现,有望成为该领域的标杆。作为资深AI工程师,本文将深入探讨Manus的背景知识、主要业务场景、底层原理、功能的优缺点,并尝试使用Java搭建一个属于自己的Manus助手,以期为AI Agent技术的发展和应用提供参考。
11070 13
|
8天前
|
机器学习/深度学习 人工智能 测试技术
阿里云百炼已上线超强推理开源模型QwQ-32B,尺寸更小,性能比肩DeepSeek满血版
通义千问团队推出了320亿参数的QwQ-32B模型,通过大规模强化学习和多阶段训练,在数学、编程及通用能力上达到或超越了DeepSeek-R1等先进模型。QwQ-32B模型已在阿里云百炼上线,支持API调用,用户可通过官方文档了解详细使用方法。未来,团队将继续探索智能体与RL集成,推动人工通用智能的发展。