社区讨论
【最长路】求解。。
P1250种树参与者 5已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @mi6gewsk
- 此快照首次捕获于
- 2025/11/20 04:27 4 个月前
- 此快照最后确认于
- 2025/11/20 04:31 4 个月前
为什么这个最长路过不了啊。。。最短路就过了。。。
最长路:
CPP#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct edge{
int to,ne,dis;
}e[300005];
int n,m,x,y,z,ecnt,head[50005],dis[50005];
bool used[50005];
queue<int> q;
void add(int a,int b,int c)
{
e[++ecnt].to=b;
e[ecnt].ne=head[a];
e[ecnt].dis=c;
head[a]=ecnt;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
add(x-1,y,z);
}
for(int i=1;i<=n;++i)
{
add(i-1,i,0);
add(i,i-1,-1);
add(n+1,i-1,0);
}
add(n+1,n,0);
add(0,n+1,0);
q.push(0);
used[0]=1;
while(!q.empty())
{
int d=q.front();
q.pop();
used[d]=0;
for(int i=head[d];i;i=e[i].ne)
{
int dd=e[i].to;
if(dis[dd]<dis[d]+e[i].dis)
{
dis[dd]=dis[d]+e[i].dis;
if(!used[dd])
{
used[dd]=1;
q.push(dd);
}
}
}
}
printf("%d",dis[n]);
}-
最短路:
CPP#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
struct edge{
int to,ne,dis;
}e[300005];
int n,m,x,y,z,ecnt,head[50005],dis[50005];
bool used[50005];
queue<int> q;
void add(int a,int b,int c)
{
e[++ecnt].to=b;
e[ecnt].ne=head[a];
e[ecnt].dis=c;
head[a]=ecnt;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
add(x-1,y,-z);
}
for(int i=1;i<=n;++i)
{
add(i-1,i,0);
add(i,i-1,1);
add(n+1,i,0);
}
add(0,n+1,0);
memset(dis,63,sizeof(dis));
dis[0]=0;
q.push(0);
used[0]=1;
while(!q.empty())
{
int d=q.front();
q.pop();
used[d]=0;
for(int i=head[d];i;i=e[i].ne)
{
int dd=e[i].to;
if(dis[dd]>dis[d]+e[i].dis)
{
dis[dd]=dis[d]+e[i].dis;
if(!used[dd])
{
used[dd]=1;
q.push(dd);
}
}
}
}
printf("%d",-dis[n]);
}
回复
共 11 条回复,欢迎继续交流。
正在加载回复...