ZOJ3080 ChiBi(SPFA)
来源:互联网 发布:淘宝衣服直播主播招聘 编辑:程序博客网 时间:2024/06/03 13:36
题意:求在最少士兵条件下,烧光曹船的最小时间。分析:无向非连通图。用并差集做联通块,并让一个联通块所有点指向同一父节点,然后枚举所有点并将结果更新在其ans[fa[i]](上一操作使同一联通块fa值相同).最后统计所用联通块最大值即可
#include<iostream>#include<cstring>#include<cmath>#include<queue>#include<cstdio>using namespace std;const int INF=0x3f3f3f3f;const int MAXN=1000+6;const int MAXM=MAXN*MAXN;int u[MAXM],v[MAXM],w[MAXM];int ans[MAXN],first[MAXN],inq[MAXN];int next[MAXM];int leng[MAXN],dis[MAXN],fa[MAXN];int n,cnt;int _find(int x){ while(x!=fa[x]) x=fa[x]; return x;}void presolve(){int i;for(i=0;i<n;i++)fa[i]=i; for(i=0;i<cnt;i++) { int x=_find(u[i]); int y=_find(v[i]); if(x!=y)fa[x]=y; } for(i=0;i<n;i++) fa[i]=_find(i);}void add_d(int a,int b,int c){ u[cnt]=a; v[cnt]=b; w[cnt]=c; next[cnt]=first[a]; first[a]=cnt++;}int solve(int x){ queue<int>q; memset(dis,0x3f,sizeof dis); memset(inq,0,sizeof inq); q.push(x);dis[x]=0; inq[x]=1; while(!q.empty()) { int e,x=q.front();q.pop(); inq[x]=0; for(e=first[x];e!=-1;e=next[e]) if(dis[u[e]]+w[e]<dis[v[e]]) { dis[v[e]]=dis[u[e]]+w[e]; if(!inq[v[e]]) { q.push(v[e]); inq[v[e]]=1; } } } int i,sum=0; for(i=0;i<n;i++) if(dis[i]>sum&&dis[i]!=INF)sum=dis[i]; return leng[x]+sum;}int main(){ int i,j,k,x;//freopen("123.txt","r",stdin); while(~scanf("%d",&n)) { cnt=0;memset(first,-1,sizeof first);memset(next,-1,sizeof next); for(i=0;i<n;i++) for(j=0;j<n;j++) { scanf("%d",&x); if(i!=j&&x!=-1)add_d(i,j,x); } for(i=0;i<n;i++) scanf("%d",&leng[i]); presolve(); memset(ans,0x3f,sizeof ans); int key; for(i=0;i<n;i++) if((key=solve(i))<ans[fa[i]])ans[fa[i]]=key; int sum=0; for(i=0;i<n;i++) if(ans[i]!=INF&&ans[i]>sum)sum=ans[i]; printf("%d\n",sum); } return 0;}
0 0
- ZOJ3080 ChiBi(SPFA)
- ZOJ3080 ChiBi (最短路)
- zoj3080 ChiBi --- floyd求连通块内最短路
- ZOJ 3080 ChiBi(SPFA,并查集)
- ChiBi
- ZJU 3080 ChiBi
- zoj 3080 ChiBi
- zoj 3080 ChiBi
- ZOJ 3080 ChiBi [图论]
- HDU5542-The Battle of Chibi
- The Battle of Chibi HDU
- SPFA
- spfa
- spfa
- SPFA
- SPFA
- SPFA
- SPFA
- 暑期70言吸记下改牙俳
- 使用libsqlite库进行Android NDK开发
- JS 模板引擎 BaiduTemplate 和 ArtTemplate 对比及应用
- 【LeetCode with Python】 Longest Common Prefix
- 关于raw_input( )和sys.stdin.readline( )的区别
- ZOJ3080 ChiBi(SPFA)
- Lua学习笔记之元表元方法
- 编程练习:MP3播放器
- 进程保护(带源码)
- ACM1568
- 【LeetCode with Python】 Longest Consecutive Sequence
- jQuery ScrollPagination 自动增加分页及重复加载问题
- Python 面向对象编程
- Linq 先进行分组,在进行排序(选取某一个人的最新的一条记录)