70tle求助
  • 板块P1186 玛丽卡
  • 楼主tghr0503
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/24 21:02
  • 上次更新2024/4/25 11:31:12
查看原帖
70tle求助
1049497
tghr0503楼主2024/4/24 21:02
#include<iostream>
#include<cstring>
#include<queue>
#include<stack>
using namespace std;
const int N=1010;
stack<int>q;
int n,m;
int g[N][N];
int dist[N];
bool st[N];
int x[10010],y[10010],o=0,path[N];
int mx=-0x3f3f3f3f;

void dijkstra()
{
    memset(dist,0x3f,sizeof dist);
    memset(st,0,sizeof st);
    dist[1]=0;
    for(int i=0;i<n;i++)
    {
        int t=-1;
        for(int j=1;j<=n;j++)
        {
            if(!st[j]&&(t==-1||dist[t]>dist[j]))t=j;
        }
        st[t]=1;
        for(int j=1;j<=n;j++)
        {
            if(dist[j]>dist[t]+g[t][j])
            {
                dist[j]=dist[t]+g[t][j];
                path[j]=t;
            }
        }
    }
}

void ac()
{
    int j;
    for(int i=2;i<=n;i++)
    {
        j=i;
        while(path[j]!=-1)
        {
            q.push(j);
            j=path[j];
        }
    }
    q.push(j);
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    memset(g,0x3f,sizeof g);
    memset(path,-1,sizeof path);
    cin>>n>>m;
    while(m--)
    {
        int a,b,c;
        cin>>a>>b>>c;
        g[a][b]=c;
        g[b][a]=c;
        x[++o]=a;
        y[o]=b;
    }
    dijkstra();
    ac();
    while(q.size())
    {
        int x1=q.top();
        q.pop();
        if(q.empty())break;
        int y1=q.top();
        int qq=g[x1][y1];
        g[x1][y1]=0x3f3f3f3f;
        g[y1][x1]=0x3f3f3f3f;
        dijkstra();
        mx=max(mx,dist[n]);
        g[x1][y1]=qq;
        g[y1][x1]=qq;
    }
    cout<<mx<<endl;
}
2024/4/24 21:02
加载中...