QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#420224#7012. Rikka with An Unnamed TempleLynkcatWA 1377ms10000kbC++203.5kb2024-05-24 15:33:362024-05-24 15:33:37

Judging History

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

  • [2024-05-24 15:33:37]
  • 评测
  • 测评结果:WA
  • 用时:1377ms
  • 内存:10000kb
  • [2024-05-24 15:33:36]
  • 提交

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.se==0) 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 (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);
	// cerr<<ru[n]<<endl;
	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);
		}
	}

	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]);
		}
	}
	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].se==0||suf[y][(T-j+K)%K].se==0) 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;
			// cout<<x<<" "<<y<<" "<<tmp.fi<<".."<<tmp.se<<" "<<endl;
			if (now.fi==tmp.fi) now.se=(now.se+tmp.se)%mod;
			else 
			if (now.fi<tmp.fi) now.fi=tmp.fi,now.se=tmp.se;
		}
		if (l+1<=r-1) update(1,1,n,l+1,r-1,now);
	}
	for (int i=1;i<=n;i++)
	{
		pa now=query(1,1,n,ip[i]);
		if (now.se==0) 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
...
*/

详细

Test #1:

score: 100
Accepted
time: 3ms
memory: 10000kb

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: -100
Wrong Answer
time: 1377ms
memory: 8832kb

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 19069
26 496
26 39848
26 4480599
26 362321
26 2196607
26 987972
26 1691477
-1
26 480938
26 3131998
26 4480599
26 39848
26 59401
26 3924855
26 29476
-1
26 2497033
26 5885768
26 1914003
26 6529
26 4480599
26 19069
26 5885768
26 480938
26 52
26 502046
-1
26 362321
26 502046
26 208886
26 583196
26...

result:

wrong answer 2nd lines differ - expected: '26 4598303', found: '26 19069'