DLX。针对每个城市,每个城市可充电的区间构成一个plan。每个决策由N*D个时间及N个精确覆盖构成。

  1. /* 3663 */
  2. #include <iostream>
  3. #include <string>
  4. #include <map>
  5. #include <queue>
  6. #include <set>
  7. #include <stack>
  8. #include <vector>
  9. #include <deque>
  10. #include <algorithm>
  11. #include <cstdio>
  12. #include <cmath>
  13. #include <ctime>
  14. #include <cstring>
  15. #include <climits>
  16. #include <cctype>
  17. #include <cassert>
  18. #include <functional>
  19. #include <iterator>
  20. #include <iomanip>
  21. using namespace std;
  22. //#pragma comment(linker,"/STACK:102400000,1024000")
  23.  
  24. #define sti set<int>
  25. #define stpii set<pair<int, int> >
  26. #define mpii map<int,int>
  27. #define vi vector<int>
  28. #define pii pair<int,int>
  29. #define vpii vector<pair<int,int> >
  30. #define rep(i, a, n) for (int i=a;i<n;++i)
  31. #define per(i, a, n) for (int i=n-1;i>=a;--i)
  32. #define clr clear
  33. #define pb push_back
  34. #define mp make_pair
  35. #define fir first
  36. #define sec second
  37. #define all(x) (x).begin(),(x).end()
  38. #define SZ(x) ((int)(x).size())
  39. #define lson l, mid, rt<<1
  40. #define rson mid+1, r, rt<<1|1
  41.  
  42. const int maxn = ;
  43. const int maxe = ;
  44. int B[maxn];
  45. int S[maxn], E[maxn];
  46. int ut[maxn], vt[maxn];
  47. int N, M, D;
  48. int adj[maxn][maxn];
  49. int arr[maxn];
  50.  
  51. typedef struct {
  52. static const int maxc = *+;
  53. static const int maxr = *+;
  54. static const int maxn = ***+;
  55.  
  56. int n, sz;
  57. int S[maxc];
  58.  
  59. int row[maxn], col[maxn];
  60. int L[maxn], R[maxn], U[maxn], D[maxn];
  61.  
  62. int bound;
  63. int ansd, ans[maxr];
  64.  
  65. void init(int bound_, int n_) {
  66. bound = bound_;
  67. n = n_;
  68.  
  69. rep(i, , n+) {
  70. L[i] = i - ;
  71. R[i] = i + ;
  72. U[i] = i;
  73. D[i] = i;
  74. col[i] = i;
  75. }
  76. L[] = n;
  77. R[n] = ;
  78.  
  79. sz = n + ;
  80. memset(S, , sizeof(S));
  81. }
  82.  
  83. void addRow(int r, vi columns) {
  84. int first = sz;
  85. int size = SZ(columns);
  86.  
  87. rep(i, , size) {
  88. int c = columns[i];
  89.  
  90. L[sz] = sz - ;
  91. R[sz] = sz + ;
  92.  
  93. D[sz] = c;
  94. U[sz] = U[c];
  95. D[U[c]] = sz;
  96. U[c] = sz;
  97.  
  98. row[sz] = r;
  99. col[sz] = c;
  100.  
  101. ++S[c];
  102. ++sz;
  103. }
  104.  
  105. L[first] = sz - ;
  106. R[sz - ] = first;
  107. }
  108.  
  109. void remove(int c) {
  110. L[R[c]] = L[c];
  111. R[L[c]] = R[c];
  112. for (int i=D[c]; i!=c; i=D[i]) {
  113. for (int j=R[i]; j!=i; j=R[j]) {
  114. U[D[j]] = U[j];
  115. D[U[j]] = D[j];
  116. --S[col[j]];
  117. }
  118. }
  119. }
  120.  
  121. void restore(int c) {
  122. L[R[c]] = c;
  123. R[L[c]] = c;
  124. for (int i=D[c]; i!=c; i=D[i]) {
  125. for (int j=R[i]; j!=i; j=R[j]) {
  126. U[D[j]] = j;
  127. D[U[j]] = j;
  128. ++S[col[j]];
  129. }
  130. }
  131. }
  132.  
  133. bool dfs(int d) {
  134. if (R[]== || R[]>bound) {
  135. ansd = d;
  136. return true;
  137. }
  138.  
  139. int c = R[];
  140. for (int i=R[]; i!=&&i<=bound; i=R[i]) {
  141. if (S[i] < S[c])
  142. c = i;
  143. }
  144.  
  145. remove(c);
  146. for (int i=D[c]; i!=c; i=D[i]) {
  147. ans[d] = row[i];
  148. for (int j=R[i]; j!=i; j=R[j]) {
  149. remove(col[j]);
  150. }
  151. if (dfs(d + )) return true;
  152. for (int j=L[i]; j!=i; j=L[j]) {
  153. restore(col[j]);
  154. }
  155. }
  156. restore(c);
  157.  
  158. return false;
  159. }
  160.  
  161. } DLX;
  162.  
  163. DLX solver;
  164.  
  165. int encode(int index, int s, int e) {
  166. return (index<<) + (s<<)+e;
  167. }
  168.  
  169. void decode(int code, int& index, int& s, int& e) {
  170. e = code & ;
  171. code >>= ;
  172. s = code & ;
  173. code >>= ;
  174. index = code;
  175. }
  176.  
  177. void solve() {
  178. int nd = N*D;
  179. solver.init(nd, nd+N);
  180.  
  181. B[] = ;
  182. rep(i, , N+)
  183. B[i] = B[i-]+D;
  184.  
  185. rep(i, , N+) {
  186. int s = S[i];
  187. int e = E[i];
  188. int m = ;
  189. rep(j, , N+) {
  190. if (adj[i][j])
  191. arr[m++] = j;
  192. }
  193.  
  194. rep(ss, s, e+) {
  195. rep(ee, ss, e+) {
  196. vi columns;
  197. rep(k, , m) {
  198. int v = arr[k];
  199. rep(j, ss, ee+)
  200. columns.pb(B[v] + j);
  201. }
  202. columns.pb(nd + i);
  203. solver.addRow(encode(i, ss, ee), columns);
  204. }
  205. }
  206. }
  207.  
  208. bool flag = solver.dfs();
  209. if (flag) {
  210. memset(ut, , sizeof(ut));
  211. memset(vt, , sizeof(vt));
  212. int s, e, index;
  213. rep(i, , solver.ansd) {
  214. decode(solver.ans[i], index, s, e);
  215. ut[index] = s;
  216. vt[index] = e;
  217. }
  218. rep(i, , N+)
  219. printf("%d %d\n", ut[i], vt[i]);
  220. } else {
  221. puts("No solution");
  222. }
  223. putchar('\n');
  224. }
  225.  
  226. int main() {
  227. ios::sync_with_stdio(false);
  228. #ifndef ONLINE_JUDGE
  229. freopen("data.in", "r", stdin);
  230. freopen("data.out", "w", stdout);
  231. #endif
  232.  
  233. int u, v;
  234.  
  235. while (scanf("%d %d %d",&N,&M,&D)!=EOF) {
  236. memset(adj, false, sizeof(adj));
  237. rep(i, , M) {
  238. scanf("%d %d", &u, &v);
  239. adj[u][v] = adj[v][u] = true;
  240. }
  241. rep(i, , N+)
  242. adj[i][i] = true;
  243. rep(i, , N+) {
  244. scanf("%d %d", &S[i], &E[i]);
  245. }
  246. solve();
  247. }
  248.  
  249. #ifndef ONLINE_JUDGE
  250. printf("time = %d.\n", (int)clock());
  251. #endif
  252.  
  253. return ;
  254. }

【HDOJ】Power Stations的更多相关文章

  1. 【SPOJ】Power Modulo Inverted(拓展BSGS)

    [SPOJ]Power Modulo Inverted(拓展BSGS) 题面 洛谷 求最小的\(y\) 满足 \[k\equiv x^y(mod\ z)\] 题解 拓展\(BSGS\)模板题 #inc ...

  2. 【CF913G】Power Substring 数论+原根

    [CF913G]Power Substring 题意:T组询问,每次给定一个数a,让你求一个k,满足$2^k$的10进制的后$min(100,length(k))$位包含a作为它的子串.你只需要输出一 ...

  3. 【HDU 3663】 Power Stations

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3663 [算法] 先建图,然后用Dancing Links求解精确覆盖,即可 [代码] #inclu ...

  4. 【POJ2406】 Power Strings (KMP)

    Power Strings Description Given two strings a and b we define a*b to be their concatenation. For exa ...

  5. 【POJ2406】【KMP】Power Strings

    Description Given two strings a and b we define a*b to be their concatenation. For example, if a = & ...

  6. 【hash】Power Strings

    [题意]: 给出s串出来,能否找到一个前缀 ,通过多次前缀进行拼接.构成s串.如果有多个,请输出最多次数那个. 如:aaaa 可以用1个a,进行4次拼接 可以用2个a,进行2次拼接 可以用4个a,进行 ...

  7. 【HDOJ】3208 Integer’s Power

    1. 题目描述定义如下函数$f(x)$:对于任意整数$y$,找到满足$x^k = y$同时$x$最小并的$k$值.所求为区间$[a, b]$的数代入$f$的累加和,即\[\sum_{x=a}^{b} ...

  8. 【HDOJ】4729 An Easy Problem for Elfness

    其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...

  9. 【HDOJ】4426 Palindromic Substring

    综合性很强的一道题目,结合manacher,后缀数组,哈希,RMQ,二分可解.基本思路是通过manacher可以找到所有可能的回文串,哈希去重,后缀数组二分找数目.最后暴力求解.需要注意kth需要为_ ...

随机推荐

  1. html表单-双向绑定

    潜水多年.一直是只看不评不写多年,每每看到各位大牛分享的经典文章都是默默的收藏,对大牛技术分享技术表示感谢,这么多年从博客园学到了很多. 这段时间项目告一段落. 正好这段时间相对清闲,我也整理一些常用 ...

  2. 从V$SQL_PLAN中FORMAT执行计划

    10G版本 select sql_id from v$sqlarea where sql_text like'%xxx%'; select  * from v$sql_plan where sql_i ...

  3. oracle 12 C启动问题

    启动时出现以下报错信息: SQL> startup; ORA-48146: missing read, write, or exec permission on directory during ...

  4. as3判断XML是否合法

    XML是否合法 在我认为 XML的标签成对 并且根标签外边没有其他东西 以下是合法的 <?xml version="1.0" encoding="utf-8&quo ...

  5. (poj)3020 Antenna Placement 匹配

    题目链接 : http://poj.org/problem?id=3020 Description The Global Aerial Research Centre has been allotte ...

  6. bzoj 1096: [ZJOI2007]仓库建设

    dp是很好想的了,关键是数据太大,普通dp肯定超时,所以一定有用某种优化,dp优化也就那么几种,这道题用的是斜率优化,先写出普通的状态转移方程: dp[i] = min{  dp[j] + Σ ( p ...

  7. 树莓派实现TimeMachine以及samba服务

    最近一段时间感觉用移动硬盘备份Mac电脑很不方便,因为要把移动硬盘拿出来,还要插上电脑备份,看了一下AirPort,但是价钱太贵,况且只能用于Mac备份并不能用于其他的Samba服务等,感觉不太划算, ...

  8. trigger

    trigger() 方法触发被选元素的指定事件 <html><head><script type="text/javascript" src=&quo ...

  9. vi/vim正则表达式

    http://www.cnblogs.com/penseur/archive/2011/02/25/1964522.html 毋庸多言,在vim中正则表达式得到了十分广泛的应用. 最常用的 / 和 : ...

  10. 通过xib文件创建和连接UIView

    使用Xcode写程序,时间长了,对于界面上的元素,很多时候不想手写代码进行构建,但是有些UIView里面的子控件,又不能通过xib直接进行构造,要是总使用UIViewController来结合xib进 ...