BZOJ1880[Sdoi2009]Elaxia的路线 spfa+拓扑序
来源:互联网 发布:sumif函数匹配数据方法 编辑:程序博客网 时间:2024/05/17 09:21
首先我们求出来每一个点到
令
枚举每条边如果
我们可以发现最后选出的边一定是一些链 所以最后跑拓扑序
#include<bits/stdc++.h>#define bug(x) cout<<(#x)<<" "<<(x)<<endl#define ll long longusing namespace std;const int N=1505;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int n,m,ans,tot=1,cnt=1,dis[4][N],sum[N],head[N],in[N]; bool vis[N];queue<int>q;struct Egde{ int u,v,nxt,c;}e[N*N];void add(int u,int v,int c){ e[++tot].v=v,e[tot].u=u,e[tot].nxt=head[u],e[tot].c=c,head[u]=tot; e[++tot].v=u,e[tot].u=v,e[tot].nxt=head[v],e[tot].c=c,head[v]=tot;}void Add(int u,int v,int c){ e[++cnt].v=v,e[cnt].nxt=head[u],e[cnt].c=c,head[u]=cnt,in[v]++;}void spfa(int s,int op){ while(!q.empty()) q.pop();memset(vis,0,sizeof vis); q.push(s),dis[op][s]=0,vis[s]=1; while(!q.empty()){ int x=q.front();q.pop(); for(int i=head[x];i;i=e[i].nxt){ int j=e[i].v; if(dis[op][j]>dis[op][x]+e[i].c){ dis[op][j]=dis[op][x]+e[i].c; if(!vis[j]) vis[j]=1,q.push(j); } } vis[x]=0; }}void topsort(){ while(!q.empty()) q.pop(); for(int i=1;i<=n;i++) if(!in[i]) q.push(i); while(!q.empty()){ int x=q.front();q.pop(); for(int i=head[x];i;i=e[i].nxt){ int j=e[i].v; sum[j]=max(sum[j],sum[x]+e[i].c); if(!--in[j]) q.push(j); } } for(int i=1;i<=n;i++) ans=max(ans,sum[i]); cout<<ans<<endl; }int main(){#ifdef Devil_Gary freopen("in.txt","r",stdin);#endif memset(dis,127,sizeof dis); n=read(),m=read(); int zjq1=read(),zjq2=read(),amaz1=read(),amaz2=read(); for(int i=1,x,y,z;i<=m;i++){ x=read(),y=read(),z=read(); add(x,y,z); } spfa(zjq1,1),spfa(zjq2,2),spfa(amaz1,3),spfa(amaz2,0); int s1=dis[1][zjq2],s2=dis[3][amaz2]; memset(head,0,sizeof head); for(int i=2;i<=tot;i+=2){ int u=e[i].u,v=e[i].v; if(min(dis[1][u],dis[1][v])+min(dis[2][u],dis[2][v])+e[i].c==s1&&min(dis[3][u],dis[3][v])+min(dis[0][u],dis[0][v])+e[i].c==s2) if(dis[1][u]<dis[1][v]) Add(u,v,e[i].c); else Add(v,u,e[i].c); } topsort(); return 0;}
阅读全文
0 0
- BZOJ1880[Sdoi2009]Elaxia的路线 spfa+拓扑序
- [BZOJ1880][SDOI2009]Elaxia的路线(SPFA+拓扑排序+DP)
- bzoj1880: [Sdoi2009]Elaxia的路线 wikioi2309 SPFA
- 【BZOJ1880】【Sdoi2009】Elaxia的路线 spfa+拓扑图求最长链
- 【SDOI2009】【BZOJ1880】Elaxia的路线
- BZOJ1880: [Sdoi2009]Elaxia的路线
- bzoj1880 [Sdoi2009]Elaxia的路线
- bzoj1880: [Sdoi2009]Elaxia的路线
- bzoj1880: [Sdoi2009]Elaxia的路线
- 【BZOJ1880】【SDOI2009】Elaxia的路线
- [BZOJ1880][Sdoi2009] Elaxia的路线 (最短路,拓扑排序)
- BZOJ1880: [Sdoi2009]Elaxia的路线|dijksrtra|暴力
- BZOJ 1880 Sdoi2009 Elaxia的路线 SPFA+拓扑排序
- BZOJ-1880-Elaxia的路线-SDOI2009-SPFA+拓扑排序
- bzoj 1880: [Sdoi2009]Elaxia的路线(拓扑排序+spfa)
- [BZOJ]1880: [Sdoi2009]Elaxia的路线 spfa+拓扑图DP
- [SDOI2009]Elaxia的路线 SPFA+Topo
- [SDOI2009]Elaxia的路线
- 微信开发准备(四)--nat123内网地址公网映射实现
- Unity动画系统学习笔记<二>の问题记录
- android 设备写入文件,立即断电重启后,文件丢失,数据没有保存问题
- nova-virt与libvirt
- 收集 IT 领域伦理与道德的事实或观点
- BZOJ1880[Sdoi2009]Elaxia的路线 spfa+拓扑序
- 使用HighCharts实现实时数据展示
- 想做好社交,今日头条就不能太智能
- SQL中处理分母为0的方式
- 从零开始创业,知名律师献上这套股权激励秘笈丨72问
- 实验一与实验二
- 装饰设计模式2
- Android] 内存泄漏调试经验分享 (一)
- Harbor部署