社区讨论

为啥第十个点超时

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 条回复,欢迎继续交流。

正在加载回复...