1 条题解
-
0
自动搬运
来自洛谷,原作者为

hgckythgcfhk
这个家伙很懒,但好像留下了点东西搬运于
2025-08-24 23:12:23,当前版本为作者最后更新于2025-04-05 19:29:06,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
由于路径可以不是简单路径,所以为了使得 最大一定会走完整个连通块的每一条边,这样一定不劣,所以两个点的 等价于这两个点所在连通快的 ,只需要构造一个连通块有 到 就行,然后如果连通块边数不够或者里面的边的 不相等则无解。
以下是线下选手 队提供的赛时代码,非常感谢 队。
#include <bits/stdc++.h> #define il inline #define rg register #define cit const rg unsigned #define open ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)//,freopen("I.in","r",stdin),freopen("I.out","w",stdout) #define int rg unsigned #define void il void #define ll long long #define ull unsigned ll #define lll __int128 #define db double #define vector basic_string #define pq priority_queue #define vint vector<unsigned> #define vll vector<ll> #define vull vector<ull> #define ump unordered_map #define ust unordered_set #define deq deque #define mkp make_pair #define pii pair<unsigned,unsigned> #define pll pair<ull,ull> #define fi first #define se second #define Bool(a,n) bitset<n>a #define sca(a) for(int $=0;$<n;cin>>a[++$]) #define cle(a) memset(a,0,sizeof a) #define tmx(a) memset(a,0x3f,sizeof a) #define tmn(a) memset(a,0xbf,sizeof a) #define tif(a) memset(a,0xff,sizeof a) //#define ge getchar_unlocked() #define pu putchar_unlocked #define lik(x) __builtin_expect((x),1) #define ulk(x) __builtin_expect((x),0) #define max(a,b) (a>b?a:b) #define min(a,b) (a<b?a:b) //#define abs(a,b) (a>b?a-b:b-a) #define fls cout<<endl; #define PP pop_back() #define PS push #define BK back() #define SZ size() //inline ll max(const rg ll a,const rg ll b){return a>b?a:b;} //inline ll min(const rg ll a,const rg ll b){return a<b?a:b;} inline ll abs(const rg ll a,const rg ll b){return a>b?a-b:b-a;} using namespace std;constexpr unsigned N=1e6+1,M=4e3+2;//constexpr ll inf=1e9+7; //unsigned p; constexpr unsigned p=998244353; //constexpr unsigned p=1e9+7; //自动取模类 /**/ namespace mod{ void add(int&a,cit b){a+=b,a>=p?a-=p:0;} void sub(int&a,cit b){add(a,p-b);} il unsigned mul(cit ll a,cit ll b){return a*b%p;} il unsigned pw(int ll a,int b){int ll s=1;for(;b;b>>=1,a=a*a%p)b&1?s=s*a%p:0;return s;} il unsigned inv(cit a){return pw(a,p-2);} void div(int&a,cit b){a=mul(a,inv(b));} il unsigned div(cit a,cit b){return mul(a,inv(b));} } using mod::add; using mod::sub; using mod::mul; using mod::inv; using mod::pw; /**/ namespace IO{unsigned char b[1<<22],*l=b,*r=b; #define ge (ulk(l==r)?r=(l=b)+fread(b,1,1<<22,stdin):0,ulk(l==r)?'\0':*l++) il unsigned rd(){int char c=ge;int s=0;while(c<48||c>58)c=ge;while(lik(c<59&&c>47))s=s*10+(c&0b1111),c=ge;return s;} void rd(int&s){int char c=ge;s=0;while(c<48||c>58)c=ge;while(lik(c<59&&c>47))s=s*10+(c&0b1111),c=ge;} }using IO::rd; unsigned n,m;struct A{unsigned u,v,w;}e[N];vint a[N]; unsigned b[N],ans[N];vint c[N]; void dfs(cit u,cit rt){b[u]=rt;for(cit&v:a[u])if(!b[v])dfs(v,rt);} void init(){rd(n),rd(m); for(int i=1;i<=m;++i)rd(e[i].u),rd(e[i].v),rd(e[i].w),a[e[i].u]+=e[i].v,a[e[i].v]+=e[i].u; for(int i=1;i<=n;++i)if(!b[i])dfs(i,i); for(int i=1;i<=m;++i)c[b[e[i].u]]+=i; }void solve(){init(); for(int i=1;i<=n;++i)if(c[i].SZ){int id=0; for(cit&j:c[i])if(!id)id=e[j].w; else if(id^e[j].w){cout<<"No\n";return;} if(id>c[i].SZ){cout<<"No\n";return;} for(int j=0;j<id;++j)ans[c[i][j]]=j; for(int j=id;j<c[i].SZ;++j)ans[c[i][j]]=p; }cout<<"Yes\n";for(int i=1;i<=m;++i)cout<<ans[i]<<' '; }signed main(){open;int t=1;//cin>>t; while(t--)solve();}删除了引用的被注释掉的
hgckythgcfhk.h的内容,保证这部分全是注释。
- 1
信息
- ID
- 11798
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 4
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者