求助 TLE
查看原帖
求助 TLE
252549
Iwara楼主2023/10/3 14:08

RT

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAXN=1e6+5,MAXM=2e6+5;
ll n,m;
ll x,y,z,s;
struct edge{
	ll u,v,w,nxt;
}e[MAXM],dag[MAXM];
ll edge_num,head[MAXN];
void add_edge(ll From,ll To,ll Len){
	edge_num++;
	e[edge_num].u=From;
	e[edge_num].v=To;
	e[edge_num].w=Len;
	e[edge_num].nxt=head[From];
	head[From]=edge_num;
	return;
}
ll dag_sz,dag_head[MAXN];
void make_dag(ll From,ll To,ll Len){
	dag_sz++;
	dag[dag_sz].u=From;
	dag[dag_sz].v=To;
	dag[dag_sz].w=Len;
	dag[dag_sz].nxt=dag_head[From];
	dag_head[From]=dag_sz;
	return; 
}
ll dfn[MAXN],low[MAXN],cnt,gcc[MAXN],st[MAXN],top;
bool in_st[MAXN];
void tarjan(ll now){
	dfn[now]=low[now]=++cnt;
	in_st[now]=1,st[++top]=now;
	for(int i=head[now];i;i=e[i].nxt){
		if(!dfn[e[i].v]){
			tarjan(e[i].v);
			low[now]=min(low[now],low[e[i].v]);
		}
		else if(in_st[e[i].v])low[now]=min(low[now],dfn[e[i].v]); 
	}
	if(dfn[now]==low[now])while(1){
		gcc[st[top]]=now;
		in_st[st[top]]=0;
		if(st[top]==now){
			top--;
			break;
		}
		top--;
	}
	return;
}
ll sc[MAXN];
ll HS(ll num){
	ll qwq=floor((-1.00+sqrt(1.00+8.00*num))*0.500);
	if(qwq*(qwq+1)/2>=num)qwq--;
	return (qwq+1)*num-qwq*(qwq+1)*(qwq+2)/6;
}
ll ans=0;
void solve(ll now,ll now_score){
	ans=max(ans,now_score);
	for(int i=dag_head[now];i;i=dag[i].nxt)solve(dag[i].v,now_score+dag[i].w+sc[dag[i].v]);
	return;
}
ll read(){
	ll qwq=0;bool fl=1;char ch=getchar();
	while(!(ch>='0'&&ch<='9')){
		if(ch=='-')fl^=1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')qwq=(qwq<<1)+(qwq<<3)+(ch-'0'),ch=getchar();
	return fl?qwq:-qwq;
}
int main(){
	ios::sync_with_stdio(0);
	n=read(),m=read();
	for(int i=1;i<=m;i++){
		x=read(),y=read(),z=read();
		add_edge(x,y,z); 
	}
	s=read();
	tarjan(s);
//	cout<<HS(10)<<" HS"<<endl;
	for(int i=1;i<=m;i++){
		if(gcc[e[i].u]==gcc[e[i].v])sc[gcc[e[i].u]]+=HS(e[i].w);
		else make_dag(gcc[e[i].u],gcc[e[i].v],e[i].w);
	}
	solve(s,sc[gcc[s]]);
	cout<<ans;
//	for(int i=1;i<=n;i++)cout<<sc[i]<<" ";
	return 0;
} 

哪里写挂了/kk

2023/10/3 14:08
加载中...