为什么-10^5<=w<=10^5,数组初始化成-1也能过?
  • 板块P1807 最长路
  • 楼主illusion7
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/8/14 10:30
  • 上次更新2023/11/6 20:21:17
查看原帖
为什么-10^5<=w<=10^5,数组初始化成-1也能过?
326891
illusion7楼主2020/8/14 10:30

w不是可能小于-1吗?那-1岂不是会影响结果?为什么初始化成-1也能ac?f数组存储的是结果,WS数组存的是u到v的边权。

#include<bits/stdc++.h>
using namespace std;

int n,m,a,b,w;
int inDegree[1505],f[1505],WS[1505][1505];
vector<int> v[1505];
queue<int> q;

int main(){
	memset(f,-1,sizeof(f));
	memset(WS,-1,sizeof(WS));
    cin>>n>>m;
    for(int i=1;i<=m;i++){
    	cin>>a>>b>>w;
    	inDegree[b]++;
    	v[a].push_back(b);
    	WS[a][b]=max(WS[a][b],w); //给了多个权值时选最大的
    }
    //除了1,入度为0的点都要删除,删除含义对应的操作就是让这个点对下一个点的入度-1
    for(int i=2;i<=n;i++){
    	if(inDegree[i]==0){
    		for(int j=0;j<v[i].size();j++) inDegree[v[i][j]]--;
    	}
    }
    f[1]=0;
    q.push(1);
    while(!q.empty()){
    	int t=q.front(); q.pop();
    	for(int i=0;i<v[t].size();i++){
    		int idx=v[t][i];
    		f[idx]=max(f[idx],f[t]+WS[t][idx]);
    		if(--inDegree[idx]==0) q.push(idx);
    	}
    }
    cout<<f[n];
    return 0;
}
2020/8/14 10:30
加载中...