图论
来源:互联网 发布:广电总局对于网络剧 编辑:程序博客网 时间:2024/06/05 21:01
floyd
dijstra
spfa
bzoj1001
浅析最大最小定理在信息学竞赛中的应用
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>#define MAXN 2000001#define INF (~0U>>1)#define F(i,j,n) for(int i=j;i<=n;i++)#include<queue>#include<vector>using namespace std;vector<int>edge[MAXN],weight[MAXN];bool vst[MAXN];int n,m,x,t,dis[MAXN];struct Heapnode{ int dist,num; bool operator <(const Heapnode & x)const{ return dist>x.dist; }};void solve(){ int x=max(n,m); int p,minn=INF; F(i,1,x-1) { scanf("%d",&p); minn=min(p,minn); } if(minn==INF) minn=0; printf("%d\n",minn); return ;}priority_queue<Heapnode> Q;int main(){ scanf("%d%d",&n,&m); if(n==1||m==1) { solve(); return 0; } t=(n-1)*(m-1)*2+1; F(i,1,n) F(j,1,m-1) { scanf("%d",&x); if(i==1) { edge[t].push_back(2*j); weight[t].push_back(x); edge[2*j].push_back(t); weight[2*j].push_back(x); } if(i==n) { int p=2*(n-2)*(m-1)+2*j-1; edge[0].push_back(p); weight[0].push_back(x); edge[p].push_back(0); weight[p].push_back(x); } if(i<n&&i>1) { int p=2*(m-1)*(i-1)+2*j; int q=2*(m-1)*(i-2)+2*j-1; edge[p].push_back(q); weight[p].push_back(x); edge[q].push_back(p); weight[q].push_back(x); } } F(i,1,n-1) F(j,1,m) { scanf("%d",&x); if(j==1) { int p=2*(m-1)*(i-1)+1; edge[0].push_back(p); weight[0].push_back(x); edge[p].push_back(0); weight[p].push_back(x); } if(j==m) { int p=2*(m-1)*i; edge[t].push_back(p); weight[t].push_back(x); edge[p].push_back(t); weight[p].push_back(x); } if(j>1&&j<m) { int p=2*(m-1)*(i-1)+2*(j-1); edge[p].push_back(p+1); weight[p].push_back(x); edge[p+1].push_back(p); weight[p+1].push_back(x); } } F(i,1,n-1) F(j,1,m-1) { scanf("%d",&x); int p=2*(m-1)*(i-1)+2*j-1; edge[p].push_back(p+1); weight[p].push_back(x); edge[p+1].push_back(p); weight[p+1].push_back(x); } F(i,1,t) dis[i]=INF; dis[0]=0; memset(vst,false,sizeof(vst)); Q.push((Heapnode){0,0}); while(!Q.empty()) { Heapnode x=Q.top(); Q.pop(); if(vst[x.num]) continue; vst[x.num]=true; for(int i=0;i<edge[x.num].size();i++) { if(dis[edge[x.num][i]]>dis[x.num]+weight[x.num][i]) { dis[edge[x.num][i]]=dis[x.num]+weight[x.num][i]; Q.push((Heapnode){dis[edge[x.num][i]],edge[x.num][i]}); } } } printf("%d\n",dis[t]); return 0;}
bzoj1726
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>#include<queue>#define F(i,j,n) for(int i=j;i<=n;i++)#define inf (~0U>>1)using namespace std;inline int read(){ int num=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch<='9'&&ch>='0'){ num=num*10+ch-'0'; ch=getchar(); } return num;}int m,n,d,head[5005],cnt;int dis[5005][2];int tmp,ans=inf;int a,b,x;bool v[5005];struct edge{ int f,t,l; }e[200005];queue<int> Q;void add(int f,int t,int l){ e[++cnt].f=head[f]; e[cnt].t=t; e[cnt].l=l; head[f]=cnt;}void spfa(int start,int num){ memset(v,0,sizeof(v)); dis[start][num]=0; Q.push(start); v[start]=1; while(!Q.empty()){ int y=Q.front(); Q.pop(); v[y]=0; for(int i=head[y];i;i=e[i].f){ if(dis[e[i].t][num]>dis[y][num]+e[i].l) { dis[e[i].t][num]=dis[y][num]+e[i].l; if(!v[e[i].t]) { Q.push(e[i].t); v[e[i].t]=1; } } } }}int main(){ memset(dis,0x7f,sizeof(dis)); n=read(); m=read(); for(int i=1;i<=m;i++){ a=read(); b=read(); x=read(); add(a,b,x); add(b,a,x); } spfa(1,0); spfa(n,1); F(i,1,n) for(int j=head[i];j;j=e[j].f){ tmp=dis[i][0]+dis[e[j].t][1]+e[j].l; if(tmp>dis[n][0]&&tmp<ans) ans=tmp; } printf("%d\n",ans);}
两次spfa分别从头和尾
之后枚举每一条边大于最小值的最小值
bzoj2763
分层图
bzoj1614
二分答案
silver
Claris说普及组
不离散化?
bzoj1774
最小生成树
bzoj3943
求最大生成树
bzoj1050
从小到大加边
bzoj3714
连边
最小生成树
bzoj4554
二分图
什么都不会QwQ
bzoj 1529
裸题,卡内存
bzoj1051奇怪
bzoj1093
dag找点权值最大
拓扑排序
阅读全文
1 0
- 图论
- 图论
- 图论
- 图论
- 图论
- 图论
- 图论
- 图论
- 图论
- 图论
- 图论
- 图论
- 图论~~!!!
- 图论
- 图论
- 图论
- 图论
- 图论
- 实时监控文件夹及文件的变化
- cv2.findContours()返回函数详解, findContours()
- css学习笔记-border-image
- 学习自动化测试工具TW小结
- 【Halcon】vs2010与Halcon10.0的配置
- 图论
- 和程序员有些不解之缘
- 解决 IDEA 中src下xml等资源文件无法读取的问题
- 浅谈 white-space, word-wrap, word-break,强制换行的区别
- code[vs] 2235 机票打折
- Memcache的部署和使用
- win10中修改mac地址(总有一款适合你)
- Arduino Uno 使用 4x4 矩阵按键 实现你家的密码锁吧
- 记不住如何创建utf8数据库怎么办