社区讨论
80分求调
P2149[SDOI2009] Elaxia的路线参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m4xx30lg
- 此快照首次捕获于
- 2024/12/21 16:28 去年
- 此快照最后确认于
- 2025/11/04 12:32 4 个月前
WA9和hack
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
struct mpm{
int to,len;
bool operator<(const mpm&x)const
{
return len>x.len;
}
};
int in[600086];
bool b[600086];
vector<mpm>mp[600086];
vector<mpm>xm[600086];
vector<int> dj(int x)
{
vector<int>s(600086,LONG_LONG_MAX);
memset(b,0,sizeof b);
priority_queue<mpm>oppo;
oppo.push(mpm{x,0});
s[x]=0;
while(oppo.size()){
mpm k=oppo.top();oppo.pop();
if(b[k.to])continue;
b[k.to]=1;
for(int i=0;i<mp[k.to].size();i++)
{
if(s[mp[k.to][i].to]>s[k.to]+mp[k.to][i].len){
s[mp[k.to][i].to]=s[k.to]+mp[k.to][i].len;
oppo.push(mpm{mp[k.to][i].to,s[mp[k.to][i].to]});
}
}
}
return s;
}
int x[600086];
int y[600086];
int z[600086];
queue<int>oppo;
int s[600086];
signed main()
{
int n,m;
cin>>n>>m;
int S1,E1,S2,E2;
cin>>S1>>E1>>S2>>E2;
for(int i=1;i<=m;i++)
{
scanf("%lld%lld%lld",&x[i],&y[i],&z[i]);
mp[x[i]].push_back(mpm{y[i],z[i]});
mp[y[i]].push_back(mpm{x[i],z[i]});
}
vector<int>F1=dj(S1);
vector<int>F2=dj(E1);
vector<int>F3=dj(S2);
vector<int>F4=dj(E2);
for(int i=1;i<=m;i++)
{
if((F1[x[i]]+F2[y[i]]+z[i]==F1[E1]||F1[y[i]]+F2[x[i]]+z[i]==F1[E1])&&(F3[x[i]]+F4[y[i]]+z[i]==F3[E2]||F3[y[i]]+F4[x[i]]+z[i]==F3[E2])){
xm[x[i]].push_back(mpm{y[i],z[i]});
in[y[i]]++;
}
}
for(int i=1;i<=n;i++)
{
if(!in[i])oppo.push(i);
}
while(oppo.size()){
int k=oppo.front();oppo.pop();
for(int i=0;i<xm[k].size();i++)
{
s[xm[k][i].to]=max(s[xm[k][i].to],s[k]+xm[k][i].len);
if(--in[xm[k][i].to]==0){
oppo.push(xm[k][i].to);
}
}
}
int ans=0;
for(int i=1;i<=n;i++)ans=max(ans,s[i]);
cout<<ans;
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...