当前位置: 首页 > wzjs >正文

网站 备案 初审简单好看个人主页网站模板

网站 备案 初审,简单好看个人主页网站模板,做付费网站,在线网页游戏免费玩题目链接 题意 给定一个无向连通图,edges{u,v,w} 表示 u u u和 v v v之间有一条无向边,边权为 w w w n n n个点 [ 1 , n ] [1,n] [1,n] 每个点到 n n n的最短路为 d i s [ i ] dis[i] dis[i] 定义受限路径: 从起点 1 1 1到 n n n,路径上的…

题目链接

题意

给定一个无向连通图,edges={u,v,w} 表示 u u u v v v之间有一条无向边,边权为 w w w
n n n个点 [ 1 , n ] [1,n] [1,n] 每个点到 n n n的最短路为 d i s [ i ] dis[i] dis[i]
定义受限路径: 从起点 1 1 1 n n n,路径上的 d i s [ i ] dis[i] dis[i]递减
1->n的受限路径方案数

方法一 Dijkstra+记忆化搜索

思路

通过Dijkstra预处理出每个点距离 n n n的最短路
通过dfs枚举每种方案 加上记忆化 避免超时

Code

using ll = long long;
#define pii pair<int,int>
#define ar2 array<ll,2>
void cmax(int &a,int b){a=max(a,b);};
void cmin(int &a,int b){a=min(a,b);};
const int N=1e5+10,MOD=1e9+7,INF=0x3f3f3f3f;const long long LINF=LLONG_MAX;const double eps=1e-6;
int a[N];
class Solution {
public:int countRestrictedPaths(int n, vector<vector<int>>& edges) {vector<vector<ar2>>g(n+1);for(auto e:edges){int u=e[0],v=e[1],w=e[2];g[u].push_back({w,v});g[v].push_back({w,u});}vector<ll>dis(n+1,LINF);//注意要用LINF,INF太小了dis[n]=0;priority_queue<pii,vector<pii>,greater<>>pq;pq.emplace(0,n);while(pq.size()){auto [d,i]=pq.top();pq.pop();if(d>dis[i]) continue;for(auto [w,j]:g[i]){if(dis[j]>d+w){dis[j]=d+w;pq.emplace(dis[j],j);}}}// if(dis[1]==LINF) return 0;for(int i=1;i<=n;i++){if(dis[i]==LINF) dis[i]=-1;}cout<<dis[1]<<endl;vector<ll>memo(n+1,-1);function<ll(int)>dfs=[&](int i)->ll{if(i==n) return 1;if(memo[i]!=-1) return memo[i];int ret=0;for(auto [w,j]:g[i]){if(dis[i]>dis[j]){ret=(ret+dfs(j))%MOD;}}// printf("dfs(%d),retrun %d\n",i,ret%MOD);memo[i]=ret%MOD;return memo[i];};return dfs(1)%MOD;}
};

实现细节

  • 注意 Dijkstra要从终点 n n n开始扩展最短路,因为 d i s [ i ] dis[i] dis[i]在此题中表示 i i i n n n的距离,跟常见的Dijkstra不同 不是表示 i i i 1 1 1的距离
    记得开longlong,并且无穷大也要用longlong的max来表示,不然有一个样例过不去

方法二 Dijkstra+dp

思路

思路同上,把记忆化搜索改成dp,我感觉没有记忆化搜索直观,但是能快一点点

Code

using ll = long long;
#define pii pair<int,int>
#define ar2 array<ll,2>
#define endl '\n'
void cmax(int &a,int b){a=max(a,b);};
void cmin(int &a,int b){a=min(a,b);};
const int N=1e5+10,MOD=1e9+7,INF=0x3f3f3f3f;const long long LINF=LLONG_MAX;const double eps=1e-6;class Solution {
public:int countRestrictedPaths(int n, vector<vector<int>>& edges) {vector<vector<ar2>>g(n+1);for(auto e:edges){int u=e[0],v=e[1],w=e[2];g[u].push_back({w,v});g[v].push_back({w,u});}vector<ll>dis(n+1,LINF);dis[n]=0;priority_queue<pii,vector<pii>,greater<>>pq;pq.emplace(0,n);while(pq.size()){auto [d,i]=pq.top();pq.pop();if(d>dis[i]) continue;for(auto [w,j]:g[i]){if(dis[j]>d+w){dis[j]=d+w;pq.emplace(dis[j],j);}}}// if(dis[1]==LINF) return 0;for(int i=1;i<=n;i++){if(dis[i]==LINF) dis[i]=-1;}vector<int>idx(n);iota(idx.begin(),idx.end(),1);sort(idx.begin(),idx.end(),[&](int a,int b){return dis[a]<dis[b];});//按最短路从小到大排序vector<ll>dp(n+1);//dp[i]表示从i到n的方案数dp[n]=1;for(int i:idx){for(auto [_,j]:g[i]){if(dis[i]>dis[j]){dp[i]=(dp[i]+dp[j])%MOD;}}}return dp[1];}
};

实现细节

根据最短路从小到大更新dp
因为受限路径要求dp[i]要根据dis小于dis[i]的值更新

http://www.dtcms.com/wzjs/580789.html

相关文章:

  • 要看网站是多少wordpress 自定义翻页
  • 大气医院网站源码lamp网站怎么建设
  • 软件网站模板wordpress调分类目录的方法
  • 江门骏域网站建设凌风wordpress百度云
  • 村建站属于哪个部门网站为什么要挂服务器
  • 网站优化主要优化哪些地方网站设计 扁平化
  • 免费简单网站无锡建设网站制作
  • 网站 公司备案与个人备案文明网站的建设与管理几点思考
  • 包头市做网站公司网络维护合同
  • 建站工具 营销找工作用什么平台最好
  • 网站设计制作代码网站备案关闭网站
  • 徐州手机网站营销公司哪家好展示性公司网站html
  • 东莞网站网络公司国家示范校建设成果网站
  • 植物网站设计方案vi设计合同
  • 网站专题页面文案设计在大网站做网页广告需要多少钱
  • 集团网站建设特色做网站设计可以参照别人的么
  • 建站之星官网 discuz重庆拓达建设集团网站
  • vs做网站开发网站建设开发三层架构
  • 网站制作手机模板网站出现风险如何处理方法
  • 视频网站VIP卡怎么做赠品麻江网站建设
  • 西安做网站印象网络dedecms做的网站网站中的图片总是被同一ip恶意点击
  • 苏州网站推广哪家好上海住房和城乡建设部网站
  • 马鞍山建设工程监督站网站06年可以做相册视频的网站
  • 农产品网站建设策划wordpress 一键安装
  • seo网站案例网站备案下来以后怎么做网页
  • c2c电子商务网站的建站目的网站开发与维护费用
  • 手机php网站开发工具金属材料东莞网站建设
  • 手机投资理财网站建设win7优化大师官方网站
  • 山西网站建设网站小程序开发费用明细怎么填
  • 网站怎么做电脑系统下载软件深度网网站建设