hdu 3873+DIJ的思想
来源:互联网 发布:中世纪2原版优化9兵种 编辑:程序博客网 时间:2024/05/16 00:25
开始做的时候,模模糊糊知道点思想,但老是wa,我开始是,当更新到一个点的时候 如果通过这个点使得某些点没约束了,就更新dis=max(dis,l) l是这个点的最短路(相对起点)
但老是wa,后来想了下,要用一个数组记录需要到这个点,需要到达所有点时间的最大值,每次循环,用这个更新下dis才比较科学,改了下 AC了
#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<vector>const int inf=99999999;using namespace std;int T,n,m,a,b,l,vi[3010],nu,ct[3010],dis[3010],f[3010];struct node{int y,l;node(int a,int b):y(a),l(b){}friend bool operator < (node a,node b){return a.l>b.l;}};vector<node>vt[3010];vector<int>st[3010];int DIJ(){priority_queue<node>q;fill(dis,dis+n+1,inf);dis[1]=0;q.push(node(1,0));memset(vi,0,sizeof(vi));memset(f,0,sizeof(f));while(!q.empty()){int s=q.top().y,l=q.top().l;q.pop();if(vi[s])continue;vi[s]=1;if(s==n)return l;for(int i=0;i<st[s].size();i++){int y=st[s][i];if(vi[y])continue;--ct[y];f[y]=max(f[y],dis[s]);}for(int i=0;i<vt[s].size();i++){int y=vt[s][i].y,ll=vt[s][i].l;if(dis[y]>l+ll)dis[y]=l+ll;}for(int i=1;i<=n;i++){if(vi[i])continue;dis[i]=max(dis[i],f[i]);if(ct[i]==0)q.push(node(i,dis[i]));}}}int main(){scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){vt[i].clear();st[i].clear();}for(int i=0;i<m;i++){scanf("%d%d%d",&a,&b,&l);vt[a].push_back(node(b,l));}for(int i=1;i<=n;i++){scanf("%d",&nu);ct[i]=nu;for(int j=1;j<=nu;j++){int tmp;scanf("%d",&tmp);st[tmp].push_back(i);}}printf("%d\n",DIJ());}return 0;}
- hdu 3873+DIJ的思想
- hdu 2066 一个人的旅行 (DIJ)
- POJ 2253:Frogger:dij的最短路思想变型
- hdu 2544 dij
- hdu 4568 dij+TSP
- hdu2112 HDU Today---dij
- HDU 2066 一个人的旅行 (裸的dij)
- hdu 3873 Invade the Mars(heap + dij变形)
- hdu 2145 (排序+dij)
- hdu 2544 最短路 (dij)
- HDU 2544 最短路 Dij
- hdu 6005 Pandaland(dij+暴力)
- POJ1797 dij的变形。
- Dij
- hdu 2112 HDU Today (map+DIJ)
- In Touch (hdu 5361 优先队列的Dij + 并查集优化)
- HDU 3035 War 平面最小割+优先队列优化的dij
- HDU 2680 有点坑的稠密图最短路(dij各版本)
- 做一个会享受生活的程序员从找女朋友开始
- 另一道与fork()有关的面试题
- 程序员的入静和入世
- protected方法类型和final的字段类型
- 国外程序员分享的10条编程经典语录
- hdu 3873+DIJ的思想
- 一个身居中国的法国程序员谈Python与PHP
- LightOJ 1043 Triangle Partitioning
- 成功需要先例
- 人类最遥远的ROM
- Unicode下CString转换为char *
- linux创建用户、设置密码、修改用户、删除用户
- [android研究联系人之四]联系人StructuredPostal/StructuredName数据操作
- vi常用命令图