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

上海建设单位工程备案网站yandex引擎搜索入口

上海建设单位工程备案网站,yandex引擎搜索入口,长沙网站制作多少钱,logo制作下载不难看出,这是一道在图上 D P DP DP的问题。设 f i f_i fi​表示从 i i i出发,能够不停的游走下去,所需要的最少的初始资产。可以写出粗略的转移: f u min ⁡ ( f u , max ⁡ ( f v − p i , r i ) ) f_u\min(f_u,\max(f_v-p_i,r…

不难看出,这是一道在图上 D P DP DP的问题。设 f i f_i fi表示从 i i i出发,能够不停的游走下去,所需要的最少的初始资产。可以写出粗略的转移: f u = min ⁡ ( f u , max ⁡ ( f v − p i , r i ) ) f_u=\min(f_u,\max(f_v-p_i,r_i)) fu=min(fu,max(fvpi,ri))

一个粗略的想法是,我们找出所有的环,然后跑 spfa \text{spfa} spfa。但是找环需要枚举环上的一个点,难以优化。

我们能想到的比较高效的找环方式是拓扑排序(在这道题目中,拓扑排序的主要用途是帮助我们删掉出度为 0 0 0的点,从而找到所有的环)。因此,考虑删掉所有出度为 0 0 0的点,此时每个点都至少在一个环中,因此 f u f_u fu的初值是 r m a x r_{max} rmax。(事实上,我们甚至可以通过拓扑排序找到包含节点 u u u的所有环中 r m a x r_{max} rmax的最小值,这一点后面会提到)。

考虑如何求出 f u f_u fu。我们用一个队列维护已经确定的所有的 f u f_u fu,每次在图中找到 r i r_i ri最大的边 ( u , v , r , p ) (u,v,r,p) (u,v,r,p),如果 f v f_v fv的值已经确定了,那么用 f v f_v fv去更新 f u f_u fu;否则,我们发现 r r r恰好是环上边的最大值(因为 v v v还没有入队),可以直接用 r r r去更新 f u f_u fu。然后我们将这条最大的边从图中删去,将出度为 0 0 0的点加入队列即可。注意每次操作完要将队列清空(保证每个点至少在一个环中)。

仔细思考这个过程,事实上和通过拓扑排序找到所有 f u f_u fu的初值(包含 u u u的所有环中 r m a x r_{max} rmax的最小值),然后跑 spfa \text{spfa} spfa等价。(当然 spfa \text{spfa} spfa更慢)

复杂度 O ( m log ⁡ m ) O(m\log m) O(mlogm)。瓶颈在于排序。

考场上居然没想到用拓扑排序找环。。。可能还是因为惯性思维,因为不是 D A G DAG DAG所以没想到拓扑排序吧。

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define fi first
#define se second
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
const int N=2e5+5;
int n,m,du[N],vs[N];
struct node{int u,v,r,p;bool operator <(const node &a)const{return r>a.r;}
}e[N];
ll f[N];
queue<int>Q;
vector<int>G[N];
void chmin(ll &x,ll y){x=min(x,y);
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m;for(int i=1;i<=m;i++){cin>>e[i].u>>e[i].v>>e[i].r>>e[i].p;}sort(e+1,e+1+m);for(int i=1;i<=m;i++){G[e[i].v].pb(i),du[e[i].u]++;}memset(f,0x3f,sizeof f);for(int i=1;i<=n;i++)if(du[i]==0)Q.push(i);for(int i=1;i<=m;i++){while(Q.size()){int u=Q.front();Q.pop();for(auto id:G[u]){if(vs[id])continue;int v=e[id].u;if(f[u]!=inf)chmin(f[v],max(f[u]-e[id].p,1ll*e[id].r));vs[id]=1;if(--du[v]==0)Q.push(v);}}if(!vs[i]){vs[i]=1;chmin(f[e[i].u],e[i].r);if(--du[e[i].u]==0)Q.push(e[i].u);}}for(int i=1;i<=n;i++)cout<<(f[i]==inf?-1:f[i])<<" ";
}
http://www.yidumall.com/news/107813.html

相关文章:

  • 政府网站建设发展规划杭州网站制作排名
  • 客户买东西返利网站怎么做济南百度快照推广公司
  • 3d建模网站网址导航怎样推广
  • 广东省做网站推广公司长沙服务好的网络营销
  • 可以做申论的网站厦门关键词优化seo
  • 网站备案需先做网站吗微信小程序开发零基础入门
  • 没有域名可以先做网站吗杭州小周seo
  • 大学城网站开发公司关键词排名优化技巧
  • 湛江网站营销网站有吗免费的
  • 网站开通流程黑帽seo什么意思
  • 网站除了wordpress外系统优化app最新版
  • 有了域名和空间怎么建网站推广方式有哪些
  • 动易企业网站女教师遭网课入侵视频大全集
  • 08 iis安装网站荆门刚刚发布的
  • 图片素材网站免费大推荐seo外链
  • 上海做网站推广公司品牌软文营销案例
  • 微信网站协议书精准营销案例
  • 客服外包公司怎么开seo优化关键词0
  • 上海奉贤网站建设 列表网公司宣传推广方案
  • 怎么仿制别人的网站百度网盘24小时人工电话
  • 杭州市萧山区哪家做网站的公司好北京seo顾问服务
  • 企业网站推广过程网络营销课程ppt
  • 大同做网站什么软件能搜索关键词能快速找到
  • 乐清做网站建设关键词搜索引擎排名查询
  • 红桥集团网站建设搜索引擎的三个技巧
  • wordpress安卓源码seo免费诊断电话
  • 网站如何建数据库广州百度seo优化排名
  • 零用贷网站如何做南京seo排名收费
  • jsp网站开发期末大作业免费建站有哪些
  • 嘉兴商城网站开发设计怎么去推广自己的店铺