1. 程式人生 > >Underground Lab CodeForces - 782E (歐拉序)

Underground Lab CodeForces - 782E (歐拉序)

push stream continue 歐拉序 sin left inf mes int

大意:$n$結點,$m$條邊無向圖, 有$k$個人, 每個人最多走$\left\lceil\frac {2n}{k}\right\rceil$步, 求一種方案使得$k$個人走遍所有的點

$n$結點樹的歐拉序長度為$2n-1$, 直接取$dfs$樹的歐拉序即可

#include <iostream>
#include <algorithm>
#include <math.h>
#include <cstdio>
#include <vector>
#define pb push_back
#define REP(i,a,n) for(int i=a;i<=n;++i)
using
namespace std; const int N = 4e5+10, INF = 0x3f3f3f3f; int n, m, k, mx; int vis[N]; vector<int> g[N], path; void dfs(int x) { vis[x] = 1, path.pb(x); for (int y:g[x]) { if (!vis[y]) dfs(y),path.pb(x); } } int main() { cin>>n>>m>>k; REP(i,1,m) {
int x, y; cin>>x>>y; g[x].pb(y),g[y].pb(x); } dfs(1),path.pop_back(); for (int i=1; i<=k; cout<<‘\n‘,++i) { if (path.empty()) { cout<<"1 1"; continue; } int mx = (2*n+k-1)/k; if (mx>path.size()) mx = path.size(); cout
<<mx<< ; REP(j,1,mx) { cout<<path.back()<< ; path.pop_back(); } } }

Underground Lab CodeForces - 782E (歐拉序)