大陆争~~爸~~霸题解
时间:2019-08-24
本文章向大家介绍大陆争~~爸~~霸题解,主要包括大陆争~~爸~~霸题解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
大陆争 爸 霸这道题非常的玄学。
具体思路是这样的:看看每个守护某个门的结界最快什么时候能被炸掉。反正机器人不要钱,有无限个。你不如没走一步带无穷个机器人。然后霸这些值和到达某个门的最短路取个max就可以啦。
实现是跑一边迪杰斯特拉,跑的时候顺便更新这些玩意。
具体代码实现:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> #include<climits> #define int long long #define maxa 8005 using namespace std; void read(int &x){ x=0; int f=1; char c=getchar(); while(c<'0'||c>'9'){ if(c=='-')f=-1; c=getchar(); } while(c<='9'&&c>='0'){ x=((x<<1)+(x<<3))+c-'0'; c=getchar(); } x*=f; return ; } int n,m; int l[maxa]; vector <int> a[maxa]; int to[maxa*20],nxt[maxa*20],h[maxa],top,val[maxa*20]; void psh(int u,int v,int va){ to[++top]=v,nxt[top]=h[u],h[u]=top,val[top]=va; return ; } int d1[maxa],d2[maxa],c[maxa]; bool vis[maxa]; void AC_DREAM(){ priority_queue<pair <int,int> ,vector<pair <int,int> >,greater<pair <int,int> > >q; for(int i=1;i<=n;i++)d1[i]=INT_MAX; q.push(make_pair(0,1)); d1[1]=0; while(!q.empty()){ int now=q.top().second;q.pop(); if(vis[now])continue; vis[now]=1; int mx=max(d1[now],d2[now]); for(int i=h[now];i;i=nxt[i]){ int y=to[i]; if(mx+val[i]<d1[y]){ d1[y]=mx+val[i]; int tmp=max(d1[y],d2[y]); if(!c[y])q.push(make_pair(tmp,y)); } } for(int i=0,t;i<l[now];i++){ t=a[now][i]; c[t]--;d2[t]=max(d2[t],mx); int tmp=max(d1[t],d2[t]); if(!c[t])q.push(make_pair(tmp,t)); } } return ; } #undef int int main(){ #define int long long read(n),read(m); for(int i=1,u,v,va;i<=m;i++){ read(u),read(v),read(va); if(u!=v)psh(u,v,va); } for(int i=1,x;i<=n;i++){ read(c[i]); for(int j=1;j<=c[i];j++){ read(x); l[x]++; a[x].push_back(i); } } AC_DREAM(); cout<<max(d1[n],d2[n]); }
然后你就A了这道毒瘤签到题啦!
原文地址:https://www.cnblogs.com/WQT-FFT/p/11406452.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android实现倾斜角标样式
- 浅谈Flutter 中渐变的高级用法(3种)
- Android实现左上角(其他边角)倾斜的标签(环绕效果)效果
- Android开发中Button组件的使用
- Android开发之基于RecycleView实现的头部悬浮控件
- Android如何通过命令行操作Sqlite3数据库的方法
- Android实现沉浸式状态栏功能
- PHP对验证码的认证过程
- Android实现图片加载进度提示
- android shape实现阴影或模糊边效果
- Spring Data JPA主键采用UUID策略
- Android自定义控件之水平圆点加载进度条
- Android屏幕旋转之横屏竖屏切换的实现
- Android Studio连接SQLite数据库的登录注册实现
- Android 获取 usb 权限的两种方法