社区讨论
为啥第十个点超时
P1186玛丽卡参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi4hp135
- 此快照首次捕获于
- 2025/11/18 19:27 4 个月前
- 此快照最后确认于
- 2025/11/18 19:27 4 个月前
RT,代码如下:
CPP#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
struct edge{int p,v;};
typedef vector<edge> vn;const int inf=100000000;
int n,m,dis[1001],pre[1001],ans,sv;bool book[1001];
vn l[1001];vn::iterator pree[1001];edge np;
void spfa()
{
queue<int> que;
for(int i=1;i<=n;i++)dis[i]=inf,book[i]=0;
dis[1]=0,pre[1]=0,book[1]=1;que.push(1);
while(!que.empty())
{
int f=que.front();
for(vn::iterator i=l[f].begin();i!=l[f].end();i++)
if(dis[i->p]>dis[f]+i->v)
{
dis[i->p]=dis[f]+i->v,pre[i->p]=f;pree[i->p]=i;
if(!book[i->p]){que.push(i->p);book[i->p]=1;}
}
que.pop();book[f]=0;
}
}
int main()
{
ios::sync_with_stdio(0);
cin>>n>>m;
while(m--){int a;cin>>a>>np.p>>np.v;l[a].push_back(np);swap(a,np.p);l[a].push_back(np);}
spfa();
vector<vn::iterator> pass;
int q=n;
while(q!=1){pass.push_back(pree[q]);q=pre[q];}
for(unsigned int i=0;i<pass.size();i++){sv=pass[i]->v,pass[i]->v=inf;spfa();ans=max(ans,dis[n]);pass[i]->v=sv;}
cout<<ans;
return 0;
}
为啥CODEVS上AC了……这里AC不了?难道是……这边的输入数据有毒?
回复
共 2 条回复,欢迎继续交流。
正在加载回复...