hdu 4781 Assignment For Princess(构造法).pdf

hdu 4781 Assignment For Princess(构造法).pdf

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
hdu 4781 Assignment For Princess(构造法)

构造一个n个点 ,m条有向边的图 ,需要满足两个要求 : 1.任意一对点对之间最多有一条有向边 ,且 有 自环。 2.保证图联通 ,m条边的边权严格属于[1, m]且互不相同 ,从任意点出发 ,经过任意路径后回到 起始点 ,经过的边权总和是3的倍数。 其中第二个要求似乎听上去很玄乎 ,其实可以一步一步的来 :要同时满足1.2的要求 ,而且输入 数据 m = n + 3 ,那么也就是说 ,我们总是能轻松的先构造一个n个点n条有向边的环 ,其中前 n-1条边的边权是1...2..3...n-1 ,对于最后一条边 ,可以取n, n+1或 n+2 ,总之使得这个环的总权 值tot%3==0就行了。 这样的话 ,我们就完成了初步建图 :已经构造了一个n个点n条边且满足题意的图了 ,那么对于剩 下的m-n条边怎么办 ?如果我们需要在原有的环上添加一条边权为w的边 ,并且还要维护图的1.2 性质 ,显然 ,我们只需要找到这样一个点对 u, v ,其中在我们构造的初始环上 ,u - v 的距离 为g[u][v] , 那么只需要g[u][v] % 3 == w % 3 ,我们就能保证图的性质不变了 ! #includealgorithm #includeiostream #includecstdio #includecstring #includevector #define REP (i, n) for (int i=0; in; i++) #define (i, a, b) for (int i=a; ib; i++) #define CLR (a, b) memset (a, b, sizeof(a)) using namespace std; const int maxn = 100; int n, m, T, g [maxn][maxn], dist [maxn][maxn]; bool vis[10000]; vectorpairint, int edges; vectorint G [maxn]; bool gao (int x) { (i, 1, n+1) (j, 1, n+1) if(i != j) { if(dist [i][j] == 0 dist [j][i] == 0) { if(g [i][j] % 3 == x % 3) { dist [i][j] = x; return true; } } } return false; } bool solve () { (i, 1, m+1) if(!vis[i]) if(!gao (i)) return false; return true; } int dfs (int u, int pos, int fa, int len) { if(u == pos) return len; 1 REP (i, G [u].size ()) { int v = edges[G [u][i]].first, w = edges[G [u][i]].second; if(v != fa) return dfs (v, pos, u, len+w); } } void build () { CLR (vis, 0); CLR (dist, 0); REP (i, n+1) G [i].clear (); edges.clear (); int tot = 0, sz = 0; (i, 1, n) { edges.push_back (make_pair (i+1, i)); G [i].push_back (sz++); vis[i] = 1; dist [i][i+1] = i; tot += i; } (

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档