0分求调,看了好久没看出来哪有问题
  • 板块P2656 采蘑菇
  • 楼主liusir146
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/9 09:58
  • 上次更新2024/10/9 10:00:01
查看原帖
0分求调,看了好久没看出来哪有问题
819516
liusir146楼主2024/10/9 09:58
#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
const int N=1e6+10;
struct Node{
	int from,next,to,w;
	double idx;
}a[N],b[N];
int n,m,ss,tot,timestamp,cnt,tt,s[N],low[N],dfn[N],ins[N],belong[N],d[N],vis[N],dq[N],val[N],val1[N];
int head1[N],tot1,head[N];
queue<int> q; 
void add(int u,int v,double w,double idx){
	a[++tot].to=v;
	a[tot].w=w;
	a[tot].from=u;
	a[tot].idx=idx;
	a[tot].next=head[u];
	head[u]=tot;
	while((int)w){
		val[tot]+=(int)w;
		w=(int)(floor(w*idx));
	}
}
void add1(int u,int v,double w){
	b[++tot1].to=v;
	b[tot1].from=u;
	b[tot1].w=-w;
	b[tot1].next=head1[u];
	head1[u]=tot1;
}
void dfs(int u){
	dfn[u]=low[u]=++timestamp;
	s[++tt]=u;
	ins[u]=1;
	for(int i=head[u];i;i=a[i].next){
		int v=a[i].to;
		if(!dfn[v]){
			dfs(v);
			low[u]=min(low[u],low[v]);
		}else if(ins[v])low[u]=min(low[u],dfn[v]);
	}
	if(dfn[u]==low[u]){
		int y;
		while(y=s[tt--]){
			belong[y]=u;
			ins[y]=0;
			if(y==u)break;
		}
	}
}
void spfa(int ss){
	memset(d,0x3f,sizeof(d));
	d[ss]=-val[ss];
	vis[ss]=1;
	q.push(belong[ss]);
	while(!q.empty()){
		int h=q.front();
		q.pop();
		vis[h]=0;
		for(int i=head[h];i;i=b[i].next){
			int v=b[i].to;
			if(d[v]>d[h]+b[i].w+dq[v]){
				d[v]=d[h]+b[i].w+dq[v];
				if(!vis[v]){
					q.push(v);
					vis[v]=1;
				}
			}
		}
	}
	int maxn=-2e9;
	for(int i=1;i<=n;i++){
		maxn=max(maxn,-d[i]);
	}
	cout<<maxn<<endl;
}
signed main(){
	freopen("P2656_1.in","r",stdin);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,w;
		double idx;
		cin>>u>>v>>w>>idx;
		add(u,v,w,idx);
	}
	for(int i=1;i<=n;i++){
		if(!dfn[i])dfs(i);
	}
	for(int i=1;i<=m;i++){
		int x=belong[a[i].from],y=belong[a[i].to];
		if(x==y){
			dq[x]+=val[i];
		}
	}
	for(int i=1;i<=m;i++){
		int x=belong[a[i].from],y=belong[a[i].to];
		if(x!=y)add1(x,y,a[i].w);
	}
	cin>>ss;
	spfa(belong[ss]);
	return 0;
}
2024/10/9 09:58
加载中...