QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#717730#9352. Highway BusesXinyoucuo1dui#WA 3ms13896kbC++235.4kb2024-11-06 18:49:432024-11-06 18:49:44

Judging History

你现在查看的是最新测评结果

  • [2024-11-06 18:49:44]
  • 评测
  • 测评结果:WA
  • 用时:3ms
  • 内存:13896kb
  • [2024-11-06 18:49:43]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
long long a,b,c,an[300001],de[300001],cnt,vi[300001],g[300001],vv[300001],st[300001],cn,q,w,h[10000001];
struct p{long long q,w;bool operator < (const p &aa) const{return w>aa.w;};}l[300001];
vector<p> qu[300001],qu1[300001],qu2[300001];
queue<int> quu;
void dfs(int qq,int ww)
{
	vv[qq]=1;
	for(int i=0;i<qu1[qq].size();i++)
	{
		if(vv[qu1[qq][i].q]) continue;
		vi[qu1[qq][i].w]=1;
		dfs(qu1[qq][i].q,qq);
	}
}
vector<int> tmp;
void dfs1(int qq)
{
	vi[qq]=1;tmp.push_back(qq);
	for(int i=0;i<qu1[qq].size();i++)
	{
		if(vi[qu1[qq][i].q]) continue;
		dfs1(qu1[qq][i].q);
	}
}
int di[103][200001];
long long si[200001],v[200001],all,mx=1e9,rt,mxd;
void dfs2(int qq,int ww)
{
	long long mxx=0;si[qq]=1;
	for(int i=0;i<qu2[qq].size();i++)
	{
		if(qu2[qq][i].q==ww) continue;
		if(v[qu2[qq][i].q]) continue;
		dfs2(qu2[qq][i].q,qq);
		si[qq]+=si[qu2[qq][i].q];
		mxx=max(mxx,si[qu2[qq][i].q]);
	}
	mxx=max(mxx,all-si[qq]);
	if(mxx<mx) mx=mxx,rt=qq;
}
vector<int> ve[300001];
void dfs3(int qq,int ww)
{
	de[qq]=de[ww]+1;mxd=max(mxd,de[qq]);
	ve[de[qq]].push_back(qq);
	for(int i=0;i<qu2[qq].size();i++)
	{
		if(qu2[qq][i].q==ww||v[qu2[qq][i].q]) continue;
		dfs3(qu2[qq][i].q,qq);
	}
}
int h1[10000001],o;
struct pp{int q,w;}l1[40000001];
long long t[300001],ls[300001];
void add(int qq,int ww)
{
	l1[++o].q=ww,l1[o].w=h1[qq],h1[qq]=o;
}
void link(int qq,int ww,long long ee)
{
	if(ee<0) return;
	++ee;
	ee=min(ee,t[ww]);
	add(qq,ls[ee]);
}
void work(int qq)
{
	mxd=0;
	dfs3(qq,0);
	int lss=0;t[qq]=mxd;
	for(int i=1;i<=mxd;i++)
	{
		++cnt;
		ls[i]=cnt;
		if(lss) add(cnt,lss);
		for(int j=0;j<ve[i].size();j++) add(cnt,ve[i][j]);
		lss=cnt;
	}
	for(int i=1;i<=mxd;i++)
	{
		for(int j=0;j<ve[i].size();j++)
		{
//			cout<<ve[i][j]<<" "<<qq<<" "<<l[ve[i][j]].q-(i-1)<<"\n";
			link(ve[i][j],qq,l[ve[i][j]].q-(i-1));
		}
	}
	for(int i=1;i<=mxd;i++) ve[i].clear();
}
void solve(int qq)
{
//	cout<<all<<" "<<mx<<"\n";
	work(qq);v[qq]=1;
	for(int i=0;i<qu2[qq].size();i++)
	{
		int tt=qu2[qq][i].q;
		if(v[tt]) continue;
//		cout<<all<<" ";
		all=si[tt],mx=1e9,rt=0;
		dfs2(tt,qq);
		solve(rt);
	}
}
void work(vector<int> qq)
{
//	cout<<qq.size()<<" "<<cnt<<" "<<o<<"\n";
//	for(int i=0;i<qq.size();i++) cout<<qq[i]<<" ";cout<<"\n";
	for(int i=0;i<qq.size();i++) vv[qq[i]]=1;
	all=0;
	for(int i=0;i<qq.size();i++)
	{
		int tt=qq[i];v[tt]=0;all++;
		qu2[tt].clear();
		for(int j=0;j<qu1[tt].size();j++)
		{
			if(vv[qu1[tt][j].q]) qu2[tt].push_back(qu1[tt][j]);
		}
	}
	mx=1e9;rt=0;
	dfs2(tmp[0],0);
//	cout<<all<<" "<<mx<<"\n";
	solve(rt);
	for(int i=0;i<qq.size();i++) vv[qq[i]]=0;
}
priority_queue<p> Qu;
void work()
{
	while(!Qu.empty()) Qu.pop();
	Qu.push(p{1,l[1].w});
	for(int i=1;i<=cnt;i++) h[i]=-1;
	h[1]=l[1].w;
	while(!Qu.empty())
	{
		int r=Qu.top().q;Qu.pop();
//		cout<<r<<" ";
		for(int i=h1[r];i;i=l1[i].w)
		{
			int tt=l1[i].q;
			if(h[tt]==-1)
			{
				if(tt>a) h[tt]=h[r];
				else h[tt]=h[r]+l[tt].w;
				Qu.push(p{tt,h[tt]});
			}
		}
	}
	for(int i=1;i<=a;i++) an[i]=min(an[i],h[i]-l[i].w);
}
long long mxxd;
void dfs4(int qq,int ww)
{
	de[qq]=de[ww]+1;ve[de[qq]-1].push_back(qq);//mxdd=max(mxdd,de[qq]-1);
	for(int i=0;i<qu1[qq].size();i++)
	{
		if(qu1[qq][i].q==ww||vi[qu1[qq][i].q]) continue;
		dfs4(qu1[qq][i].q,qq);
	}
}
int main()
{
	freopen("1.in","r",stdin);
	scanf("%lld%lld%lld",&a,&b,&c);
	for(int i=1;i<=a;i++)
	{
		scanf("%lld%lld%lld",&l[i].q,&l[i].w,&g[i]);
	}
	for(int i=1;i<=b;i++)
	{
		scanf("%lld%lld",&q,&w);
		qu[q].push_back(p{w,i});
		qu[w].push_back(p{q,i});
	}
	cnt=a+b;
	for(int i=1;i<=cnt;i++) vi[i]=0,vv[i]=0;
	cnt=a;
	for(int i=1;i<=a;i++) qu1[i]=qu[i];
	for(int i=1;i<=a;i++) de[i]=0;
	dfs(1,0);cn=0;
	for(int i=1;i<=a;i++)
	{
		for(int j=0;j<qu1[i].size();j++)
		{
			if(!vi[qu1[i][j].w])
			{
				st[++cn]=i;
			}
		}
	}
	sort(st+1,st+cn+1);cn=unique(st+1,st+cn+1)-st-1;
//	for(int i=1;i<=cn;i++) cout<<st[i]<<" ";cout<<"\n";
	for(int i=1;i<=a;i++) vi[i]=0,vv[i]=0;
	for(int i=1;i<=cn;i++) vi[st[i]]=1;
	for(int i=1;i<=cn;i++)
	{
		for(int j=1;j<=a;j++) di[i][j]=-1;
		di[i][st[i]]=0;
		while(!quu.empty()) quu.pop();
		quu.push(st[i]);
		while(!quu.empty())
		{
			int r=quu.front();quu.pop();
			for(int j=0;j<qu1[r].size();j++)
			{
				if(di[i][qu1[r][j].q]==-1)
				{
					di[i][qu1[r][j].q]=di[i][r]+1;
					quu.push(qu1[r][j].q);
				}
			}
		}
	}
//	cout<<cnt<<" "<<o;return 0;
	for(int i=1;i<=a;i++) an[i]=1e18;
	for(int i=1;i<=a;i++)
	{
		if(!vi[i])
		{
			tmp.clear();
			dfs1(i);
			work(tmp);
		}
	}
	for(int i=1;i<=a;i++) vi[i]=0;
	for(int i=1;i<=cn;i++) vi[st[i]]=1;
	for(int i=1;i<=cn;i++)
	{
		for(int j=0;j<=a;j++) ve[j].clear();
		dfs4(st[i],0);
		for(int j=1;j<=cn;j++)
		{
			if(i==j) continue;
			ve[di[i][st[j]]].push_back(st[j]);
		}
		long long mxx=0;
		for(int j=0;j<=a;j++)
		{
			if(!ve[j].size()) break;
			mxx=j;
			++cnt;ls[j]=cnt;
			if(j>0) add(ls[j],ls[j-1]);
			for(int k=0;k<ve[j].size();k++)
			{
				add(ls[j],ve[j][k]);
			}
		}
		for(int j=1;j<=a;j++)
		{
			long long nww=l[j].q-di[i][j];
			nww=min(nww,mxx);
			if(nww>=0)
			{
				add(j,ls[nww]);
			}
		}
	}
//	cout<<cnt<<" "<<o;return 0;
	work();
	for(int i=1;i<=a;i++)
	{
		l[i].w+=g[i]*(c-1);
	}
	work();
	for(int i=1;i<=a;i++) printf("%lld\n",an[i]);
	return 0;
}

详细

Test #1:

score: 0
Wrong Answer
time: 3ms
memory: 13896kb

input:

6 6 2
1 50 -40
1 2 100
2 1 100
2 4 100
3 1 100
1 1 100
1 2
2 3
3 4
4 2
2 5
6 1

output:


result:

wrong answer 1st lines differ - expected: '0', found: ''