40pts求助
查看原帖
40pts求助
351249
qige_mingzi楼主2023/9/21 18:04

RT,AC前5个点

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int cnt;
const int maxn = 6e3+10;
const int INF = 1e9;
int head[maxn<<2],nex[maxn<<2],to[maxn<<2],val[maxn<<2],from[maxn<<2];
int d[maxn],dis[maxn];
bool vis[maxn];
int ans;
struct node{
	int dis,num;
};
bool operator < (node x,node y){
	return x.dis > y.dis;
}
priority_queue<node> q;
void add(int u,int v,int w){
	nex[++cnt] = head[u];
	head[u] = cnt;
	to[cnt] = v;
	val[cnt] = w;
	from[cnt] = u;
}
bool test(){
	cout << "FuckCCF" << endl;
	return true;
}
bool BF(){
	memset(d,0x3f,sizeof(d));
	d[n] = 0;
	bool flag = false;
	for(int i = 1;i <= n;i++){
		flag = false;
		for(int j = 1;j <= n;j++){
			if(d[j] > INF){
				continue;
			}
			for(int k = head[j];k;k = nex[k]){
				if(d[from[k]] + val[k] < d[to[k]]){
					d[to[k]] = d[from[k]]+val[k];
					flag = true;
				}
			}
		}
		if(!flag){
			break;
		}
	}
	return !flag;
}
void dij(int s){
	memset(dis,0x3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	dis[s] = 0;
	while(!q.empty()){
		q.pop();
	}
	q.push((node){0,s});
	node now;
	while(!q.empty()){
		now = q.top(); q.pop();
		if(vis[now.num] == true){ continue;} vis[now.num] = true;
		for(int i = head[now.num];i;i = nex[i]){
			if(dis[now.num]+val[i] < dis[to[i]]){
				dis[to[i]] = dis[now.num]+val[i];
				q.push((node){dis[to[i]],to[i]});
			}
		}
	}
}
signed main()
{
 	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	cin >> n >> m;
	int u,v,w;
	for(int i = 1;i <= m;i++){
		scanf("%lld%lld%lld",&u,&v,&w);
		add(u,v,w);
	}
	for(int i = 1;i <= n;i++){
		add(n+1,i,0);
	}
	n++;
	if(BF() == false){
		cout << -1 << endl;
		return 0;
	}
	n--;
	for(int i = 1;i <= m;i++){
		val[i] += d[from[i]]-d[to[i]];
	}
	for(int i = 1;i <= n;i++){
		ans = 0;
		dij(i); 
		for(int j = 1;j <= n;j++){
			if(dis[j] >= INF){
				dis[j] = INF;
			}
		}
		for(int j = 1;j <= n;j++){
			ans += j*(dis[j]+d[j]-d[i]);
		}
		cout << ans << endl;
	}
	return 0;
}
/*
Author: qige_mingzi
Start thinking at
Start coding at 16:17
Finish coding at 16:54
Finish debugging at
*/

2023/9/21 18:04
加载中...