Jzzhu and Cities CodeForces
来源:互联网 发布:淘宝瑜伽服哪家店铺好 编辑:程序博客网 时间:2024/05/16 23:46
点击打开链接
做的很迷的一道题。。
开始用Dijkstra 将公路铁路都加入图中 看每一个有铁路直达的点 能否通过除这条直达铁路之外的路径来松弛 即该点是否存在代价小于等于这条铁路的路径
WA的很离谱 一时还找不到问题的原因 留坑。。也希望路过的大佬指正。。
再用spfa 只把有铁路直达的点加入队列 但铁路不加入图中 使图中只有公路 就过了(这里存图只能用vector 用链式前向星就会在最后一个样例TLE)
说明对最短路算法理解很不到位。。
#include <bits/stdc++.h>using namespace std;#define ll long long#define N 0x3f3f3f3f3f3f3f3fstruct node{ int v; ll w;};queue <int> que;vector <node> edge[100010];ll dis[100010];int first[100010],book[100010],flag[100010];int n,m,k,sum;void calculate(){ node tem; ll w; int i,u,v; while(!que.empty()) { u=que.front(); que.pop(); book[u]=0; for(i=0;i<edge[u].size();i++) { tem=edge[u][i]; v=tem.v,w=tem.w; if(dis[v]>=dis[u]+w) { dis[v]=dis[u]+w; if(book[v]==0) { que.push(v); book[v]=1; } flag[v]=0; } } } return;}int main(){ node tem; ll w; int i,u,v,sum; while(scanf("%d%d%d",&n,&m,&k)!=EOF) { for(i=1;i<=n;i++) { edge[i].clear(); } for(i=1;i<=m;i++) { scanf("%d%d%lld",&u,&v,&w); tem.v=v,tem.w=w; edge[u].push_back(tem); tem.v=u,tem.w=w; edge[v].push_back(tem); } while(!que.empty()) que.pop(); memset(dis,0x3f,sizeof(dis)); memset(book,0,sizeof(book)); memset(flag,0,sizeof(flag)); que.push(1); dis[1]=0; book[1]=1; sum=0; for(i=1;i<=k;i++) { scanf("%d%lld",&v,&w); if(dis[v]==N) { dis[v]=w; } else { sum++; if(dis[v]>w) dis[v]=w; } flag[v]=1; } for(i=1;i<=n;i++) { if(flag[i]==1) { que.push(i); book[i]=1; } } calculate(); sum=0; for(i=1;i<=n;i++) { sum+=flag[i]; } printf("%d\n",k-sum); } return 0;}
以下是WA代码。。
#include <bits/stdc++.h>using namespace std;#define ll long long#define N 0x3f3f3f3f3f3f3f3fstruct nodeI{ int tp; int v; ll w; int next;};struct nodeII{ friend bool operator < (nodeII n1,nodeII n2) { return n1.s>n2.s; } int id; ll s;};nodeI edge[700010];ll dis[100010],flag[100010];int first[100010],book[100010];int n,m,k,num,sum;void addedge(int tp,int u,int v,ll w){ edge[num].tp=tp; edge[num].v=v; edge[num].w=w; edge[num].next=first[u]; first[u]=num++; return;}void calculate(){ priority_queue <nodeII> que; nodeII cur,tem; ll w; int i,tp,u,v; memset(dis,0x3f,sizeof(dis)); memset(book,0,sizeof(book)); tem.id=1,tem.s=0; que.push(tem); dis[1]=0; while(!que.empty()) { cur=que.top(); que.pop(); u=cur.id; if(book[u]==1) break; book[u]=1; for(i=first[u];i!=-1;i=edge[i].next) { tp=edge[i].tp,v=edge[i].v,w=edge[i].w; if(book[v]==0&&dis[v]>dis[u]+w) { dis[v]=dis[u]+w; tem.id=v; tem.s=dis[v]; que.push(tem); } if(flag[v]!=0&&tp==1) { if(flag[v]>=dis[u]+w) { flag[v]=0; sum++; } } } } return;}int main(){ ll w; int i,u,v; while(scanf("%d%d%d",&n,&m,&k)!=EOF) { memset(first,-1,sizeof(first)); memset(flag,0,sizeof(flag)); num=0; for(i=1;i<=m;i++) { scanf("%d%d%lld",&u,&v,&w); addedge(1,u,v,w); addedge(1,v,u,w); } sum=0; for(i=1;i<=k;i++) { scanf("%d%lld",&v,&w); addedge(2,1,v,w); if(flag[v]==0) { flag[v]=w; } else { sum++; if(w<flag[v]) { flag[v]=w; } } } calculate(); printf("%d\n",sum); } return 0;}
阅读全文
0 0
- codeforces Jzzhu and Cities
- Jzzhu and Cities CodeForces
- Jzzhu and Cities CodeForces
- Jzzhu and Cities ----CodeForces
- Jzzhu and Cities(CodeForces
- Jzzhu and Cities CodeForces
- Jzzhu and Cities CodeForces
- Codeforces 449 B. Jzzhu and Cities
- CodeForces 449 B. Jzzhu and Cities
- Codeforces 449B - Jzzhu and Cities / 450D - Jzzhu and Cities
- CF449B-- Jzzhu and Cities
- D. Jzzhu and Cities
- 【Codeforces】449B Jzzhu and Cities 最短路
- 【最短路】 codeforces 449B Jzzhu and Cities
- Codeforces Round #257 (Div. 2) D. Jzzhu and Cities
- Codeforces 449B Jzzhu and Cities(最短路)
- Codeforces 449B Jzzhu and Cities(最短路)
- CODEFORCES 450D Jzzhu and Cities <最短路径>
- lombok set get
- spring boot 获取jar 中xml文件属性
- 沟通技巧落地
- java.lang.NoSuchMethodError: org.springframework.expression.spel.SpelParserConfiguration
- char* char[]及string的区别及相互转换
- Jzzhu and Cities CodeForces
- Android 音频系统:从 AudioTrack 到 AudioFlinger
- 数据交互
- Linux命令简写与全称
- Android最新消息数目提醒控件BadgeView的使用
- 部署虚拟设备的3条建议
- ORA-00119: invalid specification for system parameter 解决
- 输入输出隔离的半/全双工RS-485/RS-422接口隔离芯片电路
- 【观察】同方谋定而后动 云局突破三板斧