付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<stack>#include<vector>
#defineclr(a,b)memset(a,b,sizeof(a))usingnamespacestd;
constintN=25050;constintE=150500;
//邻接表
inth[N],v[E],w[E],nxt[E],el;voidinitEdge(){
clr(h,-1);el=0;
}
voidaddEdge(intx,inty,intz){
v[el]=y;w[el]=z;nxt[el]=h[x];h[x]=el++;
}
//belong[i]表示节点i所在的强连通分量;
//cnt表示强连通分量的个数;
intdfn[N],sta[N],low[N],belong[N];inttop,cnt,ind,n;
boolvis[N];
voidTarjanSolve(intu)
{dfn[u]=low[u]=++ind;vis[u]=true;
sta[++top]=u;
for(intp=h[u];~p;p=nxt[p])
{inti=v[p];if(!dfn[i]){
TarjanSolve(i);
if(low[i]<low[u])low[u]=low[i];
}
else
if(vis[i]&&dfn[i]<low[u])low[u]=dfn[i];
}
if(dfn[u]==low[u]){
++cnt;while(1){
inti=sta[top--];vis[i]=false;belong[i]=cnt;if(i==u)break;
}
}
}
voidTarjan(){//注意节点是从几开始存的clr(dfn,0);
clr(vis,0);
top=cnt=ind=0;
for(inti=1;i<=n;i++)//这里节点从1开始存,若从0开始存要改这里
if(!dfn[i])TarjanSolve(i);
}
structEDGE{
intu,v,w;boolflag;EDGE(){}
EDGE(intx,inty,intz,boolf):u(x),v(y),w(z),flag(f){}
} edge[E];intedgel;
boolvisitable[N];
voiddfs(intx){
visitable[x]=true;
for(inti=h[x];~i;i=nxt[i]){
if(!visitable[v[i]])
{dfs(v[i]);
}
}
}
intindegree[N];
//链表
intlh[N],lel,lv[E],lnxt[E];voidinitLink(){
clr(lh,-1);lel=0;
}
voidaddLink(intx,inty){
lv[lel]=y;lnxt[lel]=lh[x];lh[x]=lel++;
}
intdis[N];booltag[N];
intmain(){
intr,p,s;
while(~scanf("%d%d%d%d",&n,&r,&p,&s))
{clr(visitable,0);initEdge();
edgel=0;intx,y,z;
for(inti=0;i<r;i++)
{scanf("%d%d%d",&x,&y,&z);addEdge(x,y,z);
addEdge(y,x,z);
edge[edgel++]=EDGE(x,y,z,false);
}
for(inti=0;i<p;i++)
{scanf("%d%d%d",&x,&y,&z);addEdge(x,y,z);
edge[edgel++]=EDGE(x,y,z,true);
}
Tarjan();
dfs(s);initEdge();initLink();clr(indegree,0);
for(inti=0;i<edgel;i++){
if(visitable[edge[i].u]&&visitable[edge[i].v])
{addEdge(edge[i].u,edge[i].v,edge[i].w);if(edge[i].flag){
++indegree[belong[edge[i].v]];addLink(belong[edge[i].v],edge[i].v);
}else{
addEdge(edge[i].v,edge[i].u,edge[i].w);
}
}
}
stack<int>zeroDegree;
priority_queue<pair<int,int>>que;clr(vis,false);
clr(tag,false);clr(dis,0x3f);dis[s]=0;
que.push(make_pair(0, s));while(!que.empty()||!zeroDegree.empty()){
if(que.empty()){
intx=zeroDegree.top();zeroDegree.pop();for(inti=lh[x];~i;i=lnxt[i]){
inty=lv[i];if(!vis[y]){
vis[y] = true;que.push(make_pair(-dis[y],y));
}
}
}else{
intx=que.top().second;que.pop();if(tag[x])continue;
tag[x] =true;
for(inti=h[x];~i;i=nxt[i])
{inty=v[i];
if(!tag[y]&&dis[y]>dis[x]+w[i])
{dis[y]=dis[x]+w[i];if(belong[x]==belong[y]){
que.push(make_pair(-dis[y],y));
}
}
if(belong[x]!=belong[y]){
--indegree[belong[y]];if(indegree[belong[y]]==0){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年航天施工物联网接入协议
- 2026浙江万里学院招聘1人备考题库(2026年第一批)及参考答案详解1套
- 2026四川省注册会计师协会招聘4人备考题库及答案详解(新)
- 2026非洲离网太阳能解决方案经济性分析与商业模式创新研究
- 2026防晒产品季节性需求与营销策略分析报告
- 2026年丽水市松阳县教育系统公开招聘中小学、幼儿园教师10人备考题库(一)及答案详解(各地真题)
- 2026河南南阳市宛城区言蹊中学招聘高中语文教师备考题库及答案详解(考点梳理)
- 2026山东菏泽市定陶区两夹弦非遗保护传承中心招聘事业工作人员备考题库及参考答案详解一套
- 2026北京市海淀区恩济里幼儿园招聘1人备考题库及答案详解参考
- 2026第十三师新星市校园招聘14人备考题库含答案详解(突破训练)
- 资金确权协议书
- 2026届江苏省南京市高三二模英语试题(含答案和音频)
- 2026版公司安全生产管理制度及文件汇编
- 2026年中国铁路各局集团招聘试题及答案解析
- 湖北省2026届高三(4月)调研模拟考试 英语答案
- 2026形势与政策课件中国风范 大国担当-在世界变局中推动构建新型大国关系
- (2025年)湖北省普通高中学业水平考试政治真题卷及答案
- 某钢铁厂成本核算细则
- 2026年基金从业资格证之私募股权投资基金基础知识测试卷含答案详解(巩固)
- 2026年八年级信息技术考试试题库(答案+解析)
- 新版人教版八年级下册数学全册教案(完整版)教学设计含教学反思
评论
0/150
提交评论