20分代码求调
查看原帖
20分代码求调
565903
ZYH_juruo楼主2024/8/6 08:42
#include<bits/stdc++.h>
#define maxn 300005
#define maxm 300005
using namespace std;
int n,m,k,t;
struct node{
	int to,w,nxt;
}edge[maxm];
int tot,head[maxm],dis[maxn],a[maxn],vis[maxn];
void add(int u,int v)
{
	edge[++tot].to=v;
	edge[tot].w=1;
	edge[tot].nxt=head[u];
	head[u]=tot;
}
bool dijkstra()
{
	priority_queue<pair<int,int> ,vector<pair<int,int> >,greater<pair<int,int> > > q;
	int mx=-200000;
	dis[1]=0;
	q.push(make_pair(0,1));
	while(!q.empty())
	{
		int x=q.top().second;
		q.pop();
		if(vis[x]) continue;
		vis[x]=1;
		for(int i=head[x];i;i=edge[i].nxt)
		{
			int k=edge[i].to;
			if(dis[k]>dis[x]+1)
			{
				dis[k]=dis[x]+1;
				q.push(make_pair(k,dis[k]));
			}
			else if(dis[k]==dis[x]+1)
				mx=max(mx,++a[i]);
		}
	}
	return mx<=k;
}
int main()
{
	cin>>t;
	while(t--)
	{
		tot=0;
		memset(edge,0,sizeof edge);
		memset(vis,0,sizeof vis);
		memset(head,0,sizeof head);
		memset(dis,0x3f,sizeof dis);
		cin>>n>>m>>k;
		for(int i=1,u,v;i<=m;i++)
		{
			cin>>u>>v;
			add(u,v);
		}
		fill(a+1,a+m+1,1);
		if(dijkstra())
		{
			cout<<"Yes"<<endl;
			for(int i=1;i<=m;i++)
				cout<<a[i]<<" ";
			cout<<endl;
		}
		else
			cout<<"No"<<endl;
	}
 	return 0;
}

rt

2024/8/6 08:42
加载中...