题意:给一个矩阵,给出每行每列之和,附加一些条件,如第i行第j列数必需大于(小于)多少。

思路题解:矩阵模型,模拟网络流,行、列标号为结点,构图,附加s,t,s连行标(容量上下限每行之和(必需以这个

值全部送过去),每个列标连向t(容量上下限每列之和)),其他每个行到列都有边(有限制的按限制

来,无限制的自己添加)。由于s->网络->t,若有解,总流量f必为

矩阵所有数之和,故添加边t-S,容量上下线为矩阵和sum,这样保证了每个点出入流相等,满足流量平衡,

转化为无源无汇有上下线可行流问题,在建立超级源点汇点ss,tt,按无源无汇法做一遍ss->tt最大流,

判断可行即可。可行输出方案。PS,若题目改为求有源有汇有限制最大流问题,可以在残量网络再走一次

s->t(原图源汇)最大流(solo可行的后悔边啥~)

此题,有源有汇有限制可行流问题,主要是建图,就是一个字烦!其一:0的时候要所有,行列为0要

讨论,其二,>,<,=符号的判定,讨论下,其三,重边,这个不是链前星锁解决那个重边,而是重边

是“且”的关系,如,先给上限,再来一边给下限!坑爹啊这是要!无法,hash判重吧,重了,再修改原来的

边,要搞清楚反向边(建图时跑第一次(第一次判断有无解)前)流量始终为0(提供后悔的,和之后没有

半毛钱关系)!至于算法,不再是问题,dinic跑的。

  1. #include<iostream> //47ms,1A
  2. #include<cstdio>
  3. #include<queue>
  4. #include<vector>
  5. using namespace std;
  6. int n,m;const int inf=0x3f3f3f3f;
  7. int suminf[300];int sumouf[300];
  8. int e[20000][5]; int head[300];int level[300];int vis[300];
  9. int hash[250][300];int ans[250][300];
  10. int nume=0;
  11. bool bfs() //dinic“d,bfs”,不用说了
  12. {
  13. for(int i=0;i<n+m+4;i++)
  14. level[i]=vis[i]=0;
  15. vis[n+m+2]=1;
  16. queue<int>q;q.push(n+m+2);
  17. while(!q.empty())
  18. {
  19. int cur=q.front();q.pop();
  20. for(int i=head[cur];i!=-1;i=e[i][1])
  21. {
  22. int v=e[i][0];
  23. if(!vis[v]&&e[i][2]>0)
  24. {
  25. level[v]=level[cur]+1;
  26. vis[v]=1;
  27. if(v==m+n+3)return 1;
  28. q.push(v);
  29. }
  30. }
  31. }
  32. return vis[n+m+3];
  33. }
  34. int dfs(int u,int minf)
  35. {
  36. if(u==n+m+3||minf==0){return minf;}
  37. int sumf=0,f;
  38. for(int i=head[u];i!=-1&&minf;i=e[i][1])
  39. {
  40. int v=e[i][0];
  41. if(level[v]==level[u]+1&&e[i][2]>0)
  42. {
  43. f=dfs(v,minf<e[i][2]?minf:e[i][2]);
  44. if(f==0)continue;
  45. e[i][2]-=f;e[i^1][2]+=f;
  46. minf-=f;sumf+=f;
  47. }
  48. }
  49. return sumf;
  50. }
  51. void dinic()
  52. {
  53. int sumflow=0;
  54. while(bfs())
  55. {
  56. sumflow+=dfs(n+m+2,inf);
  57. }
  58. }
  59. bool check() //无源无汇的,出发点ss(超级源点)的边有一条不满流就无解,原因简单必需保证流量平衡(为之提供下限)
  60. {
  61. for(int i=head[n+m+2];i!=-1;i=e[i][1])
  62. {
  63. if(e[i][2]!=0)return 0;
  64. }
  65. return 1;
  66. }
  67. int main()
  68. {
  69. int N;
  70. scanf("%d",&N);
  71. while(N--) //N组输入
  72. {
  73. scanf("\n%d%d",&n,&m); //忽略空行
  74. nume=0;
  75. int sum=0,temp;
  76. bool mark=0;
  77. for(int i=0;i<=n+m+5;i++)
  78. {
  79. head[i]=-1;
  80. suminf[i]=sumouf[i]=0;
  81. }
  82. for(int i=0;i<=n;i++)
  83. for(int j=n+1;j<=n+m+1;j++)
  84. ans[i][j]=hash[i][j]=0;
  85. for(int i=1;i<=n;i++) //有源有汇的源点s
  86. {
  87. scanf("%d",&temp);sum+=temp;
  88. e[nume][0]=i;e[nume][1]=head[0];head[0]=nume;
  89. e[nume][2]=0;e[nume][3]=temp;e[nume++][4]=temp;
  90. suminf[i]+=temp;sumouf[0]+=temp;
  91. e[nume][0]=0;e[nume][1]=head[i];head[i]=nume;
  92. e[nume++][2]=0;
  93. }
  94. for(int i=n+1;i<=m+n;i++) //汇点t
  95. {
  96. scanf("%d",&temp);
  97. e[nume][0]=n+1+m;e[nume][1]=head[i];head[i]=nume;
  98. e[nume][2]=0;e[nume][3]=temp;e[nume++][4]=temp;
  99. suminf[n+m+1]+=temp;sumouf[i]+=temp;
  100. e[nume][0]=i;e[nume][1]=head[n+m+1];head[n+m+1]=nume;
  101. e[nume++][2]=0;
  102. }
  103. e[nume][0]=0;e[nume][1]=head[n+m+1];head[n+m+1]=nume; //添加t->s
  104. e[nume][2]=0;e[nume][3]=sum;e[nume++][4]=sum;
  105. suminf[0]+=sum;sumouf[n+m+1]+=sum;
  106. e[nume][0]=n+m+1;e[nume][1]=head[0];head[0]=nume;
  107. e[nume++][2]=0;
  108. int ca;scanf("%d",&ca); int row,col,lim;char cc;
  109. for(int i=0;i<ca;i++) //按条件建图
  110. {
  111. scanf("%d%d %c %d",&row,&col,&cc,&lim);
  112. if(col!=0&&row==0)
  113. {
  114. if(cc=='=')
  115. for(int i=1;i<=n;i++)
  116. {
  117. if(hash[i][n+col]) //判重,下面一致
  118. {
  119. int pp;
  120. for( pp=head[i];e[pp][0]!=n+col;pp=e[pp][1])
  121. ;
  122. suminf[n+col]-=e[pp][3]; sumouf[i]-=e[pp][3];
  123. if(lim>e[pp][3])e[pp][3]=lim;
  124. if(lim<e[pp][4])e[pp][4]=lim;
  125. if(e[pp][3]>e[pp][4])mark=1;
  126. e[pp][2]=e[pp][4]-e[pp][3];
  127. suminf[n+col]+=e[pp][3]; sumouf[i]+=e[pp][3];
  128. }
  129. else
  130. {
  131. e[nume][0]=n+col;e[nume][1]=head[i];head[i]=nume;
  132. e[nume][2]=0;e[nume][3]=lim;e[nume++][4]=lim;
  133.  
  134. suminf[n+col]+=lim; sumouf[i]+=lim;hash[i][n+col]=1;
  135. e[nume][0]=i;e[nume][1]=head[n+col];head[n+col]=nume;
  136. e[nume++][2]=0;
  137. }
  138. }
  139. else if(cc=='>')
  140. {
  141. for(int i=1;i<=n;i++)
  142. {
  143. if(hash[i][n+col])
  144. { int pp;
  145. for( pp=head[i];e[pp][0]!=n+col;pp=e[pp][1])
  146. ;
  147. suminf[n+col]-=e[pp][3]; sumouf[i]-=e[pp][3];
  148. if(lim+1>e[pp][3])e[pp][3]=lim+1;
  149. if(inf<e[pp][4])e[pp][4]=inf;
  150. if(e[pp][3]>e[pp][4])mark=1;
  151. e[pp][2]=e[pp][4]-e[pp][3];
  152. suminf[n+col]+=e[pp][3]; sumouf[i]+=e[pp][3];
  153. }
  154. else
  155. {
  156.  
  157. e[nume][0]=n+col;e[nume][1]=head[i];head[i]=nume;
  158. e[nume][2]=inf-lim-1;e[nume][3]=lim+1;e[nume++][4]=inf;
  159. suminf[n+col]+=lim+1; sumouf[i]+=lim+1;hash[i][n+col]=1;
  160. e[nume][0]=i;e[nume][1]=head[n+col];head[n+col]=nume;
  161. e[nume++][2]=0;
  162. }
  163. }
  164. }
  165. else if(cc=='<')
  166. {
  167. for(int i=1;i<=n;i++)
  168. if(hash[i][n+col])
  169. { int pp;
  170. for(pp=head[i];e[pp][0]!=n+col;pp=e[pp][1])
  171. ;
  172. suminf[n+col]-=e[pp][3]; sumouf[i]-=e[pp][3];
  173. if(0>e[pp][3])e[pp][3]=0;
  174. if(lim-1<e[pp][4])e[pp][4]=lim-1;
  175. if(e[pp][3]>e[pp][4])mark=1;
  176. e[pp][2]=e[pp][4]-e[pp][3];
  177. suminf[n+col]+=e[pp][3]; sumouf[i]+=e[pp][3];
  178. }
  179. else
  180. {
  181. e[nume][0]=n+col;e[nume][1]=head[i];head[i]=nume;
  182. e[nume][2]=lim-1;e[nume][3]=0;e[nume++][4]=lim-1;hash[i][n+col]=1;
  183. //inf[n+rol]+=lim; sumouf[i]+=lim;
  184. e[nume][0]=i;e[nume][1]=head[n+col];head[n+col]=nume;
  185. e[nume++][2]=0;
  186. }
  187. }
  188.  
  189. }
  190. else if(row!=0&&col==0)
  191. {
  192. if(cc=='>')
  193. {
  194. for(int i=n+1;i<=n+m;i++)
  195. { if(hash[row][i])
  196. { int pp;
  197. for( pp=head[row];e[pp][0]!=i;pp=e[pp][1])
  198. ;
  199. suminf[i]-=e[pp][3]; sumouf[row]-=e[pp][3];
  200. if(lim+1>e[pp][3])e[pp][3]=lim+1;
  201. if(inf<e[pp][4])e[pp][4]=inf;
  202. if(e[pp][3]>e[pp][4])mark=1;
  203. e[pp][2]=e[pp][4]-e[pp][3];
  204. suminf[i]+=e[pp][3]; sumouf[row]+=e[pp][3];
  205. }
  206. else
  207. {
  208. e[nume][0]=i;e[nume][1]=head[row];head[row]=nume;
  209. e[nume][2]=inf-lim-1;e[nume][3]=lim+1;e[nume++][4]=inf;
  210. suminf[i]+=lim+1; sumouf[row]+=lim+1;hash[row][i]=1;
  211. e[nume][0]=row;e[nume][1]=head[i];head[i]=nume;
  212. e[nume++][2]=0;
  213. }
  214. }
  215. }
  216. else if(cc=='=')
  217. for(int i=n+1;i<=n+m;i++)
  218. {
  219. if(hash[row][i])
  220. { int pp;
  221. for(pp=head[row];e[pp][0]!=i;pp=e[pp][1])
  222. ;
  223. suminf[i]-=e[pp][3]; sumouf[row]-=e[pp][3];
  224. if(lim>e[pp][3])e[pp][3]=lim;
  225. if(lim<e[pp][4])e[pp][4]=lim;
  226. if(e[pp][3]>e[pp][4])mark=1;
  227. e[pp][2]=e[pp][4]-e[pp][3];
  228. suminf[i]+=e[pp][3]; sumouf[row]+=e[pp][3];
  229. }
  230. else
  231. {
  232.  
  233. e[nume][0]=i;e[nume][1]=head[row];head[row]=nume;
  234. e[nume][2]=0;e[nume][3]=lim;e[nume++][4]=lim;
  235. suminf[i]+=lim; sumouf[row]+=lim;hash[row][i]=1;
  236. e[nume][0]=row;e[nume][1]=head[i];head[i]=nume;
  237. e[nume++][2]=0;
  238. }
  239. }
  240. else if(cc=='<')
  241. for(int i=n+1;i<=n+m;i++)
  242. {
  243. if(hash[row][i])
  244. { int pp;
  245. for( pp=head[row];e[pp][0]!=i;pp=e[pp][1])
  246. ;
  247. suminf[i]-=e[pp][3]; sumouf[row]-=e[pp][3];
  248. if(0>e[pp][3])e[pp][3]=0;
  249. if(lim-1<e[pp][4])e[pp][4]=lim-1;
  250. if(e[pp][3]>e[pp][4])mark=1;
  251. e[pp][2]=e[pp][4]-e[pp][3];
  252. suminf[i]+=e[pp][3]; sumouf[row]+=e[pp][3];
  253. }
  254. else
  255. {
  256. e[nume][0]=i;e[nume][1]=head[row];head[row]=nume;
  257. e[nume][2]=lim-1;e[nume][3]=0;e[nume++][4]=lim-1;hash[row][i]=1;
  258. //inf[i]+=lim; sumouf[row]+=lim;
  259. e[nume][0]=row;e[nume][1]=head[i];head[i]=nume;
  260. e[nume++][2]=0;
  261. }
  262. }
  263. }
  264. else if(row==0&&col==0)
  265. {
  266. if(cc=='=')
  267. {
  268. for(int i=1;i<=n;i++)
  269. for(int j=n+1;j<=n+m;j++)
  270. {
  271. if(hash[i][j])
  272. { int pp;
  273. for( pp=head[i];e[pp][0]!=j;pp=e[pp][1])
  274. ;
  275. suminf[j]-=e[pp][3]; sumouf[i]-=e[pp][3];
  276. if(lim>e[pp][3])e[pp][3]=lim;
  277. if(lim<e[pp][4])e[pp][4]=lim;
  278. if(e[pp][3]>e[pp][4])mark=1;
  279. e[pp][2]=e[pp][4]-e[pp][3];
  280. suminf[j]+=e[pp][3]; sumouf[i]+=e[pp][3];
  281. }
  282. else
  283. {
  284. e[nume][0]=j;e[nume][1]=head[i];head[i]=nume;
  285. e[nume][2]=0;e[nume][3]=lim;e[nume++][4]=lim;
  286. suminf[j]+=lim; sumouf[i]+=lim;hash[i][j]=1;
  287. e[nume][0]=i;e[nume][1]=head[j];head[j]=nume;
  288. e[nume++][2]=0;
  289. }
  290. }
  291. }
  292. if(cc=='>')
  293. {
  294. for(int i=1;i<=n;i++)
  295. for(int j=n+1;j<=n+m;j++)
  296. {
  297. if(hash[i][j])
  298. { int pp;
  299. for( pp=head[i];e[pp][0]!=j;pp=e[pp][1])
  300. ;
  301. suminf[j]-=e[pp][3]; sumouf[i]-=e[pp][3];
  302. if(lim+1>e[pp][3])e[pp][3]=lim+1;
  303. if(inf<e[pp][4])e[pp][4]=inf;
  304. if(e[pp][3]>e[pp][4])mark=1;
  305. e[pp][2]=e[pp][4]-e[pp][3];
  306. suminf[j]+=e[pp][3]; sumouf[i]+=e[pp][3];
  307. }
  308. else
  309. {
  310. e[nume][0]=j;e[nume][1]=head[i];head[i]=nume;
  311. e[nume][2]=inf-lim-1;e[nume][3]=lim+1;e[nume++][4]=inf;
  312. suminf[j]+=lim+1; sumouf[i]+=lim+1;hash[i][j]=1;
  313. e[nume][0]=i;e[nume][1]=head[j];head[j]=nume;
  314. e[nume++][2]=0;
  315. }
  316. }
  317. }
  318. if(cc=='<')
  319. for(int i=1;i<=n;i++)
  320. for(int j=n+1;j<=n+m;j++)
  321. {
  322. if(hash[i][j])
  323. { int pp;
  324. for( pp=head[i];e[pp][0]!=j;pp=e[pp][1])
  325. ;
  326. suminf[j]-=e[pp][3]; sumouf[i]-=e[pp][3];
  327. if(0>e[pp][3])e[pp][3]=0;
  328. if(lim-1<e[pp][4])e[pp][4]=lim-1;
  329. if(e[pp][3]>e[pp][4])mark=1;
  330. e[pp][2]=e[pp][4]-e[pp][3];
  331. suminf[j]+=e[pp][3]; sumouf[i]+=e[pp][3];
  332. }
  333. else
  334. {
  335. e[nume][0]=j;e[nume][1]=head[i];head[i]=nume;
  336. e[nume][2]=lim-1;e[nume][3]=0;e[nume++][4]=lim-1;hash[i][j]=1;
  337. //inf[j]+=lim; sumouf[i]+=lim;
  338. e[nume][0]=i;e[nume][1]=head[j];head[j]=nume;
  339. e[nume++][2]=0;
  340. }
  341. }
  342. }
  343. else
  344. {
  345. if(cc=='=')
  346. {
  347. if(hash[row][n+col])
  348. { int pp;
  349. for(pp=head[row];e[pp][0]!=n+col;pp=e[pp][1])
  350. ;
  351. suminf[n+col]-=e[pp][3]; sumouf[row]-=e[pp][3];
  352. if(lim>e[pp][3])e[pp][3]=lim;
  353. if(lim<e[pp][4])e[pp][4]=lim;
  354. if(e[pp][3]>e[pp][4])mark=1;
  355. e[pp][2]=e[pp][4]-e[pp][3];
  356. suminf[n+col]+=e[pp][3]; sumouf[row]+=e[pp][3];
  357. }
  358. else
  359. {
  360. e[nume][0]=col+n;e[nume][1]=head[row];head[row]=nume;
  361. e[nume][2]=0;e[nume][3]=lim;e[nume++][4]=lim;
  362. suminf[col+n]+=lim; sumouf[row]+=lim;hash[row][col+n]=1;
  363. e[nume][0]=row;e[nume][1]=head[col+n];head[col+n]=nume;
  364. e[nume++][2]=0;
  365. }
  366. }
  367. else if(cc=='>')
  368. {
  369. if(hash[row][n+col])
  370. { int pp;
  371. for(pp=head[row];e[pp][0]!=n+col;pp=e[pp][1])
  372. ;
  373. suminf[n+col]-=e[pp][3]; sumouf[row]-=e[pp][3];
  374. if(lim+1>e[pp][3])e[pp][3]=lim+1;
  375. if(inf<e[pp][4])e[pp][4]=inf;
  376. if(e[pp][3]>e[pp][4])mark=1;
  377. e[pp][2]=e[pp][4]-e[pp][3];
  378. suminf[n+col]+=e[pp][3]; sumouf[row]+=e[pp][3];
  379. }
  380. else
  381. {
  382. e[nume][0]=col+n;e[nume][1]=head[row];head[row]=nume;
  383. e[nume][2]=inf-lim-1;e[nume][3]=lim+1;e[nume++][4]=inf;
  384. suminf[col+n]+=lim+1; sumouf[row]+=lim+1;hash[row][col+n]=1;
  385. e[nume][0]=row;e[nume][1]=head[col+n];head[col+n]=nume;
  386. e[nume++][2]=0;
  387. }
  388. }
  389. else if(cc=='<')
  390. {
  391. if(hash[row][n+col])
  392. { int pp;
  393. for( pp=head[row];e[pp][0]!=n+col;pp=e[pp][1])
  394. ;
  395. suminf[n+col]-=e[pp][3]; sumouf[row]-=e[pp][3];
  396. if(0>e[pp][3])e[pp][3]=0;
  397. if(lim-1<e[pp][4])e[pp][4]=lim-1;
  398. if(e[pp][3]>e[pp][4])mark=1;
  399. e[pp][2]=e[pp][4]-e[pp][3];
  400. suminf[n+col]+=e[pp][3]; sumouf[row]+=e[pp][3];
  401. }
  402. else
  403. {
  404.  
  405. e[nume][0]=col+n;e[nume][1]=head[row];head[row]=nume;
  406. e[nume][2]=lim-1;e[nume][3]=0;e[nume++][4]=lim-1;hash[row][col+n]=1;
  407. // inf[col]+=lim; sumouf[row]+=lim;
  408. e[nume][0]=row;e[nume][1]=head[col+n];head[col+n]=nume;
  409. e[nume++][2]=0;
  410. }
  411. }
  412. }
  413. }
  414. for(int i=1;i<=n;i++) //有些边没有限制,不要忘记加边!!
  415. for(int j=n+1;j<=n+m;j++)
  416. if(!hash[i][j])
  417. {
  418. e[nume][0]=j;e[nume][1]=head[i];head[i]=nume;
  419. e[nume][4]=inf;e[nume++][2]=inf;
  420. e[nume][0]=i;e[nume][1]=head[j];head[j]=nume;
  421. e[nume++][2]=0;
  422. }
  423. //无源无汇添加ss,tt
  424. for(int i=0;i<=n+m+1;i++)
  425. {
  426. e[nume][0]=i;e[nume][1]=head[n+m+2];head[n+m+2]=nume;
  427. e[nume++][2]=suminf[i];
  428. e[nume][0]=n+m+2;e[nume][1]=head[i];head[i]=nume;
  429. e[nume++][2]=0;
  430.  
  431. e[nume][0]=n+m+3;e[nume][1]=head[i];head[i]=nume;
  432. e[nume++][2]=sumouf[i];
  433. e[nume][0]=i;e[nume][1]=head[n+m+3];head[n+m+3]=nume;
  434. e[nume++][2]=0;
  435. }
  436. dinic(); //从ss->tt,判断有无解
  437. if(mark||!check())printf("IMPOSSIBLE\n");
  438. else //输出答案
  439. {
  440. for(int i=1;i<=n;i++)
  441. for(int j=head[i];j!=-1;j=e[j][1])
  442. ans[i][e[j][0]]=e[j][4]-e[j][2]; //原来上限-残留量,即为所用(上限-下限-残留+下限)
  443. for(int i=1;i<=n;i++)
  444. for(int j=n+1;j<=n+m;j++)
  445. {
  446. if(j!=n+m)printf("%d ",ans[i][j]);
  447. else printf("%d\n",ans[i][j]);
  448. }
  449. }
  450. if(N!=0)printf("\n");
  451. }
  452. return 0;
  453. }

POJ 2396 有源有汇有上下界可行流问题的更多相关文章

  1. [poj] 2396 [zoj] 1994 budget || 有源汇的上下界可行流

    poj原题 zoj原题 //注意zoj最后一行不要多输出空行 现在要针对多赛区竞赛制定一个预算,该预算是一个行代表不同种类支出.列代表不同赛区支出的矩阵.组委会曾经开会讨论过各类支出的总和,以及各赛区 ...

  2. SGU 176 Flow construction (有源有汇有上下界最小流)

    题意:给定 n 个点,m 条有向边,如果有向边的标号是1的话,就表示该边的上界下界都为容量 ,如果有向边的标号为0的哈,表示该边的下界为0,上界为容量 ,现在问,从 1 到 n 的最小流是多少,并输出 ...

  3. 无源汇有上下界可行流(ZQU 1590)

    无源汇有上下界可行流(也就是循环流) 模型:一个网络,求出一个流,使得每条边的流量必须>=Li且<=Hi, 每个点必须满足总流入量=总流出量(流量守恒)(这个流的特点是循环往复,无始无终) ...

  4. LOJ [#115. 无源汇有上下界可行流](https://loj.ac/problem/115)

    #115. 无源汇有上下界可行流 先扔个板子,上下界的东西一点点搞,写在奇怪的合集里面 Code: #include <cstdio> #include <cstring> # ...

  5. 2018.08.20 loj#115. 无源汇有上下界可行流(模板)

    传送门 又get到一个新技能,好兴奋的说啊. 一道无源汇有上下界可行流的模板题. 其实这东西也不难,就是将下界变形而已. 准确来说,就是对于每个点,我们算出会从它那里强制流入与流出的流量,然后与超级源 ...

  6. [loj#115] 无源汇有上下界可行流 网络流

    #115. 无源汇有上下界可行流 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据   题 ...

  7. loj#115. 无源汇有上下界可行流

    \(\color{#0066ff}{ 题目描述 }\) 这是一道模板题. \(n\) 个点,\(m\) 条边,每条边 \(e\) 有一个流量下界 \(\text{lower}(e)\) 和流量上界 \ ...

  8. 【LOJ115】无源汇有上下界可行流(模板题)

    点此看题面 大致题意: 给你每条边的流量上下界,让你判断是否存在可行流.若有,则还需输出一个合法方案. 大致思路 首先,每条边既然有一个流量下界\(lower\),我们就强制它初始流量为\(lower ...

  9. Zoj 2314 Reactor Cooling(无源汇有上下界可行流)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1314 题意:    给n个点,及m根pipe,每根pipe用来流躺液体的,单向 ...

随机推荐

  1. 验证IP端与数据库Ip端是否重复!!!

    select COUNT(id) from house_info_config hic where (hic.ip_start <![CDATA[<=]]> #{ipend} AND ...

  2. xheditor的实例程序—类似word的编辑器

    编辑器工具栏:类似word的编辑器 1.1.下载,兼容性 xhEditor官方网站地址为:http://xheditor.com/,打开右上角的免费下载 | 参数向导链接,即可找到最新版本的下载地址. ...

  3. 题解 P1189 SEARCH

    (传送门)[https://www.luogu.org/problemnew/show/P1189] 先反省一波:我以后再也不用getchar()+scanf了(日常爆零) 算是比较裸的搜索吧,在下用 ...

  4. Bootstrap历练实例:表单控件大小

    表单控件大小 您可以分别使用 class .input-lg 和 .col-lg-* 来设置表单的高度和宽度. 实例: <!DOCTYPE html><html><hea ...

  5. 一. python基础知识

    第一章.变量与判断语句 1.第一个python程序 # -*- coding:utf-8 -*- # Author: Raymond print ("hello world") p ...

  6. angular-file-upload 在IE下使用的坑

    如果在控件配置里面设置了queueLimit属性为1,就是队列文件个数为1,并且在<input>标签设置里multiple属性. 在IE浏览器上传附件的时候,浏览器会报错“SCRIPT50 ...

  7. Python学习笔记3(字典)

    创建字典 dict函数 字典的格式化字符串 字典方法 clear copy fromkeys 序列是一个按照一定顺序将值进行组织的数据结构形式,可以通过索引对其进行征引.另外还有一种数据结构是通过名字 ...

  8. python常用内置函数用法精要

    用一个表格大致总结一下所有的内置函数用法,如下: 函数 功能简要说明 abs(x) 返回数字x的绝对值或复数x的模 all(iterable) 如果对于可迭代对象中所有元素x都等价于True,则返回T ...

  9. 【Java_多线程并发编程】JUC原子类——AtomicLong原子类

    1. AtomicLong是基本原子类中的一种 AtomicLong是对长整形进行原子操作. 1.1 AtomicLong类的函数列表 // 构造函数 AtomicLong() // 创建值为init ...

  10. 使Linux支持exFAT和NTFS格式的磁盘

    Linux支持exFAT和NTFS Linux系统默认可以自动识别到fat32格式的盘,但fat32支持的文件不能大于4G,所以只能将移动硬盘和U盘格式化为NTFS和exFAT这两种格式的,对于U盘最 ...