98,开O2一样
  • 板块P1186 玛丽卡
  • 楼主U_stinian
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/8/18 22:05
  • 上次更新2023/11/3 02:47:25
查看原帖
98,开O2一样
1007656
U_stinian楼主2023/8/18 22:05
#include <bits/stdc++.h>
 
using namespace std;
const int maxn=1001;
vector<pair<int,int> >e[maxn];
int n,m,d[maxn],a,b,c,f,pre[maxn];
 
void init()
{
    for(int i=1;i<=f;i++)
    {
        d[i]=1e9;
    }
}
 
int dijkstra()
{
    init();
    priority_queue<pair<int,int> >q;
    d[f]=0;
    q.push(make_pair(-d[f],f));
    while(!q.empty())
    {
        int now=q.top().second;
        q.pop();
        for(int i=0;i<e[now].size();i++)
        {
            int v=e[now][i].first;
            if(d[v]>d[now]+e[now][i].second)
            {
                d[v]=d[now]+e[now][i].second;
                pre[v]=now;
                q.push(make_pair(-d[v],v));
            }
        }
    }
    return d[1];
}
 
int main()
{
    cin>>n>>m;
    f=n;
    for(int i=0;i<m;i++)
    {
        cin>>a>>b>>c;
        e[a].push_back(make_pair(b,c));
        e[b].push_back(make_pair(a,c));
    }
    for(int i=1;i<=n;i++)
    {
        pre[i]=-1;
    }
    int ma=dijkstra();
    stack<int>s;
    s.push(1);
    int t=1;
    while(pre[t]!=-1)
    {
        s.push(pre[t]);
        t=pre[t];
    }
    int qian=s.top();
    s.pop();
    int hou;
    while(!s.empty())
    {
        hou=s.top();
        s.pop();
        int temp1,temp2,temp3,temp4;
       for(int i=0;i<e[qian].size();i++)
        if(e[qian][i].first==hou)
       {
           temp1=e[qian][i].second;
           e[qian][i].second=1e9;
           temp3=i;
       }
       for(int i=0;i<e[hou].size();i++)
        if(e[hou][i].first==qian)
       {
           temp2=e[hou][i].second;
           e[hou][i].second=1e9;
           temp4=i;
       }
       ma=max(ma,dijkstra());
       e[qian][temp3].second=temp1;
       e[hou][temp4].second=temp2;
//        for(int i=0;i<e[qian].size();i++)
//         if(e[qian][i].first==hou)
//           e[qian][i].second=temp1;
//       for(int i=0;i<e[hou].size();i++)
//        if(e[hou][i].first==qian)
//           e[hou][i].second=temp2;
       qian=hou;
    }
    cout<<ma<<endl;
    return 0;
}
2023/8/18 22:05
加载中...