QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#420248#7012. Rikka with An Unnamed TempleLynkcatAC ✓6063ms363776kbC++203.9kb2024-05-24 15:48:412024-05-24 15:48:43

Judging History

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

  • [2024-05-24 15:48:43]
  • 评测
  • 测评结果:AC
  • 用时:6063ms
  • 内存:363776kb
  • [2024-05-24 15:48:41]
  • 提交

answer

#include<bits/stdc++.h>
#define poly vector<int>
#define IOS ios::sync_with_stdio(false)
#define ll long long
#define mp make_pair
#define mt make_tuple
#define pa pair < int,int >
#define fi first
#define se second
#define inf 1e18
#define mod 1000000007
#define sz(x) ((int)((x).size()))
#define int ll
// #define N 
using namespace std;
const int N=200005;

pa pre[100005][105],suf[100005][105];
pa tr[N<<2];
int n,m;
int w[N],c[N];
poly G[N],rG[N];
int p[N],ip[N];
int cnt;
int K,T;
pa E[N];
int ru[N];

void trans(pa &x,pa &y,int w)
{
	if (x.fi==-inf) return;
	if (x.fi+w==y.fi) y.se=(y.se+x.se)%mod;
	else if (x.fi+w>y.fi) y.fi=x.fi+w,y.se=x.se;
}
void build(int k,int l,int r)
{
	tr[k]=mp(-inf,0);
	if (l==r) return;
	int mid=l+(r-l)/2;
	build(k<<1,l,mid);
	build(k<<1|1,mid+1,r);
}
void update(int k,int l,int r,int L,int R,pa x)
{
	if (L<=l&&r<=R)
	{
		trans(x,tr[k],0);
		return;
	}
	int mid=l+(r-l)/2;
	if (L<=mid) update(k<<1,l,mid,L,R,x);
	if (R>mid) update(k<<1|1,mid+1,r,L,R,x);
}
pa query(int k,int l,int r,int L)
{
	// if (p[L]==2) cerr<<"!!!!"<<tr[k].fi<<" "<<tr[k].se<<endl;
	if (l==r) return tr[k];
	int mid=l+(r-l)/2;
	pa res=tr[k];
	if (L<=mid) 
	{
		pa x=query(k<<1,l,mid,L);
		trans(x,res,0);
	} else
	{
		pa x=query(k<<1|1,mid+1,r,L);
		trans(x,res,0);
	}
	return res;
}
void BellaKira()
{
	cin>>n>>m;
	for (int i=1;i<=n;i++)
		cin>>w[i]>>c[i];
	for (int i=1;i<=m;i++)
	{
		cin>>E[i].fi>>E[i].se;
		G[E[i].fi].push_back(E[i].se);
		rG[E[i].se].push_back(E[i].fi);
	}
	cin>>K>>T;

	queue<int>q;

	for (int i=1;i<=n;i++) 
		for (int j=0;j<K;j++)
			pre[i][j]=suf[i][j]=mp(-inf,0);

	for (int i=1;i<=n;i++) ru[i]=0;
	for (int i=1;i<=m;i++) 
		ru[E[i].se]++;
	for (int i=1;i<=n;i++) 
		if (!ru[i]) q.push(i);
	pre[1][w[1]%K]=mp(c[1],1);
	while (!q.empty())
	{
		int u=q.front();q.pop();
		p[++cnt]=u;ip[u]=cnt;
		// for (int j=K-1;j>=0;j--)
		// {
		// 	if (pre[u][j].se)
		// 	{
		// 		cerr<<u<<","<<j<<": "<<pre[u][j].fi<<" "<<K<<" "<<T<<" "<<ru[300]<<endl;
		// 		break;
		// 	}
		// }
		for (auto v:G[u])
		{
			ru[v]--;
			for (int j=0;j<K;j++)
				trans(pre[u][j],pre[v][(j+w[v])%K],c[v]);
			if (!ru[v]) q.push(v);
		}
	}
	// cerr<<pre[n][T].se<<"???"<<endl;
	for (int i=1;i<=n;i++) ru[i]=0;
	for (int i=1;i<=m;i++) 
		ru[E[i].fi]++;
	for (int i=1;i<=n;i++) 
		if (!ru[i]) q.push(i);
	suf[n][w[n]%K]=mp(c[n],1);
	while (!q.empty())
	{
		int u=q.front();q.pop();
		for (auto v:rG[u])
		{
			ru[v]--;
			for (int j=0;j<K;j++)
				trans(suf[u][j],suf[v][(j+w[v])%K],c[v]);
			if (!ru[v]) q.push(v);
		}
	}
	// cerr<<suf[1][T].se<<"???"<<endl;
	build(1,1,n);
	for (int i=1;i<=m;i++)
	{
		auto [x,y]=E[i];
		int l=ip[x],r=ip[y];
		pa now=mp(-inf,0);
		for (int j=0;j<K;j++)
		{
			if (pre[x][j].fi==-inf||suf[y][(T-j+K)%K].fi==-inf) continue;
			pa tmp;
			tmp.fi=pre[x][j].fi+suf[y][(T-j+K)%K].fi;
			tmp.se=pre[x][j].se*suf[y][(T-j+K)%K].se%mod;
			trans(tmp,now,0);
		}
		// if (x==2&&now.se)
			// cerr<<i<<" "<<now.fi<<" "<<now.se<<" "<<l<<" "<<r<<" "<<ip[2]<<endl;
		if (l+1<=r-1) update(1,1,n,l+1,r-1,now);
	}
	for (int i=1;i<=n;i++)
	{
		if (pre[n][T].fi==-inf) 
		{
			cout<<"-1\n";
			continue;
		}
		int mn=-inf;
		for (int j=0;j<K;j++) mn=max(mn,pre[i][j].fi+suf[i][(T+K-j+w[i]%K)%K].fi-c[i]);
		if (mn!=pre[n][T].fi)
		{
			if (pre[n][T].fi==-inf) cout<<"-1\n";
			else
				cout<<pre[n][T].fi<<" "<<pre[n][T].se<<'\n';
			continue;
		}
		pa now=query(1,1,n,ip[i]);
		if (now.fi==-inf) cout<<"-1\n";
		else cout<<now.fi<<" "<<now.se<<'\n';
	}

	cnt=0;
	for (int i=1;i<=n;i++) poly().swap(G[i]),poly().swap(rG[i]),ru[i]=0;
}
signed main()
{
	// freopen("1.out","w",stdout);
	IOS;
	cin.tie(0);
	int T=1;
	cin>>T;
	while (T--)
	{
		BellaKira();
	}
}
/*list:
1.mod 998244353 or 1e9+7 or ???
2.N
3.duipai shuju xingtai duoyidian
...
*/

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 20248kb

input:

1
4 5
1 2
2 3
3 4
4 2
1 2
1 3
2 4
3 4
1 4
5 3

output:

-1
8 1
-1
-1

result:

ok 4 lines

Test #2:

score: 0
Accepted
time: 1922ms
memory: 18080kb

input:

840
300 2000
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1...

output:

-1
26 4598303
26 5863883
26 5015595
26 5885768
26 5825352
26 5282239
26 5677503
26 5663242
26 5549866
26 5865190
26 5748616
26 5885768
26 5833529
26 5635401
26 5885768
26 4779744
26 2604267
26 5001275
26 5885768
26 5820512
26 4314551
26 5885768
26 4334970
26 5885768
26 5712718
26 3266408
26 5807851
...

result:

ok 252000 lines

Test #3:

score: 0
Accepted
time: 6063ms
memory: 363776kb

input:

10
100000 200000
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1...

output:

-1
92971 21
93151 80261
92971 66888304
93061 1636195
92971 1273
92971 4510
93151 287907743
92881 77902034
92881 77902034
93061 152329005
92791 11621
93061 1149299
92881 77902034
93061 1375637
92881 3146874
93241 331637001
92521 2323746
92971 74019096
93241 1634966
92971 49606952
93061 67095587
93241...

result:

ok 1000000 lines

Test #4:

score: 0
Accepted
time: 2297ms
memory: 362932kb

input:

10
100000 199996
209716784 457585002
684116471 390878750
684117472 390878750
684116198 390878750
684120293 390878750
684118746 390878750
684123023 390878750
684115288 390878750
684119383 390878750
684119747 390878750
684123387 390878750
684119201 390878750
684118200 390878750
684122841 390878750
684...

output:

-1
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
1749122861 99997
17491228...

result:

ok 1000000 lines

Test #5:

score: 0
Accepted
time: 2789ms
memory: 361144kb

input:

10
97843 190591
491838654 66190718
63066994 1
888868658 1
199879445 1
999668194 1
494916788 1
599562190 1
667839593 1
312621436 1
313720346 1
118498972 1
365124510 1
555323904 1
363282628 1
958103770 1
987214655 1
250893535 1
38283294 1
453193983 1
77880110 1
703150923 1
818318041 1
999001283 1
7817...

output:

-1
648319345 887614448
648319598 695396893
648319566 645311746
648319343 887614448
648319448 695396893
648319283 645311746
648319557 852744899
648319501 938666705
648319548 917998978
648319165 852744899
648319315 938666705
648319502 731232806
648319405 731232806
648319594 852743836
648319602 9386656...

result:

ok 941270 lines