JZOJ 5172. 【NOIP2017提高组模拟6.27】lllegal Motor
2017-06-27 22:09
387 查看
Description
Input
Output
Sample Input
Sample 1:
5 6 10 4
2 3 5
0 1 15
1 2 5
3 4 5
2 3 3
0 2 1005
Sample 2:
4 3 11 3
0 1 50
1 2 30
1 3 50
Sample Output
answer 1:
8answer 2:
0Data Constraint
Solution
这题如果没有所谓的“免费通行”,就是一道裸的单源最短路问题。现在加上了,就可以用分层(类似DP)的方法来求得最优值,很容易想到。
用Dijkstra算法可以十分轻松地AC,不过我用的是比较玄学的SPFA算法。
于是再加上SLF优化即可。(队列中的交换比较)
Code
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef pair<int,int> PI; const int N=10001; PI que[N*1300]; int tot,n,m,k,s,t; int first ,next[N*10],en[N*10],w[N*10]; int dis[11] ; bool bz [11]; inline int read() { int X=0,w=1; char ch=0; while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();} while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar(); return X*w; } inline void insert(int x,int y,int z) { next[++tot]=first[x]; first[x]=tot; en[tot]=y; w[tot]=z; } int main() { n=read(),m=read(),k=read(); if(m<=k) { printf("0"); return 0; } s=read()+1,t=read()+1; for(int i=1;i<=m;i++) { int x=read()+1,y=read()+1,z=read(); insert(x,y,z); insert(y,x,z); } memset(dis,60,sizeof(dis)); dis[k][s]=0; int l=0,r=1; que[1]=make_pair(s,k); while(l<r) { PI x=que[++l]; bz[x.first][x.second]=false; for(int i=first[x.first];i;i=next[i]) { if(x.second && dis[x.second][x.first]<dis[x.second-1][en[i]]) { dis[x.second-1][en[i]]=dis[x.second][x.first]; if(!bz[en[i]][x.second-1]) { que[++r]=make_pair(en[i],x.second-1); bz[en[i]][x.second-1]=true; if(dis[en[i]]<dis[que[l+1].first]) swap(que[r],que[l+1]);//STL优化 } } if(dis[x.second][x.first]+w[i]<dis[x.second][en[i]]) { dis[x.second][en[i]]=dis[x.second][x.first]+w[i]; if(!bz[en[i]][x.second]) { que[++r]=make_pair(en[i],x.second); bz[en[i]][x.second]=true; if(dis[en[i]]<dis[que[l+1].first]) swap(que[r],que[l+1]);//STL优化 } } } } int ans=1e9; for(int i=0;i<=k;i++) if(dis[i][t]<ans) ans=dis[i][t]; printf("%d",ans); return 0; }
相关文章推荐
- JZOJ 5406. 【NOIP2017提高A组模拟10.10】Tree
- 【JZOJ4921】【NOIP2017提高组模拟12.10】幻魔皇
- 求hack or 证明(【JZOJ 4923】 【NOIP2017提高组模拟12.17】巧克力狂欢)
- JZOJ5354. 【NOIP2017提高A组模拟9.9】导弹拦截
- JZOJ5248. 【NOIP2017提高A组模拟8.10】花花的聚会
- JZOJ 5373. 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
- jzoj. 100031. 【NOIP2017提高A组模拟7.9】外星密码
- JZOJ 100036 【NOIP2017提高A组模拟7.10】随机
- jzoj5290 【NOIP2017提高组A组模拟8.17】行程的交集 (树上路径交,dfs序+树状数组维护姿势)
- JZOJ5385. 【NOIP2017提高A组模拟9.23】Carry
- [JZOJ5390]【NOIP2017提高A组模拟9.26】逗气
- JZOJ 5392. 【NOIP2017提高A组模拟10.5】Lucky Transformation
- jzoj5399 【NOIP2017提高A组模拟10.7】Confess
- 【JZOJ4929】【NOIP2017提高组模拟12.18】B
- JZOJ5358. 【NOIP2017提高A组模拟9.12】BBQ
- JZOJ 5185. 【NOIP2017提高组模拟6.30】tty's sequence
- jzoj5249 【NOIP2017提高A组模拟8.10】文本编辑器 (序列修改类问题,数据结构)
- JZOJ5249. 【NOIP2017提高A组模拟8.10】文本编辑器
- 【jzoj5306】【NOIP2017提高A组模拟8.18】【棋盘游戏】
- 【jzoj5328】【NOIP2017提高A组模拟8.22】【世界线】【bitset】