题目csp模拟考试系统201812-5的题目。

我的java张老师是负责csp的,于是java的一个作业就是做这一套题。用java写,行,c++转java而已,写算法题嘛,基本语法懂了就好了,就边学边做。结果第三题没有java的满分题解,或者是有但我没有找到。于是很苦逼,找到一个90分的,然后努力优化。因为我比较菜,日思夜想几天后优化完了。快乐地发了上一篇博客。

然后看到第五题,内心爆炸。觉得大概可以放弃了的时候,想到了自己在codeforces讨论群,里面都是大佬。于是抱着侥幸心理提了问,然后被蔡队回复了。

蔡队想了想撤回了后一条消息:“裸题”。

然后我就开始学。这里放一下我学的顺序,程序设计界有一个原则叫作“不要重复造轮子”,所以我也就不重复讲解算法了(其实就是懒)。

先学最大流,费用流,这两个我看了李煜东的书,然后出于好奇看了最小割,这是看大白书的(纯粹因为当时手边李煜东的那本不在),接下来就是上下界最小费用循环流,参考这个https://www.cnblogs.com/nietzsche-oier/p/8185805.html

就有思路了。建图和费用流用的李煜东的写法。

有问题存在,是我的加速读入里面,我用了先读String再取里面的元素作为char的方法,这样不知道会不会反而更慢,希望能学到加速char读入的方法,目前没找到。

所以这又是一个(或许是)全网首发csp第15次第5题满分题解!这回都不加java的头衔了,因为c++都没找到题解的说。作为蒟蒻真是容易满足啊,捡漏大佬懒得写的csp题解。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;class Reader {static BufferedReader reader;static StringTokenizer tokenizer;/*** call this method to initialize reader for InputStream*/static void init(InputStream input) {reader = new BufferedReader(new InputStreamReader(input));tokenizer = new StringTokenizer("");}/*** get next word*/static String next() throws IOException {while (!tokenizer.hasMoreTokens()) {//TODO add check for eof if necessarytokenizer = new StringTokenizer(reader.readLine());}return tokenizer.nextToken();}static int nextInt() throws IOException {return Integer.parseInt(next());}static double nextDouble() throws IOException {return Double.parseDouble(next());}
}public class Main {static char nextChar() throws IOException{String s = Reader.next();return s.charAt(0);}public static int T = 0, S = 0, E = 0, mx = 4000, inf = 0x3f3f3f3f;public static int[] head = new int[mx];public static int[] Next = new int[mx];public static int[] cost = new int[mx];public static int[] ver = new int[mx];public static int[] edge = new int[mx];public static int tot, s, t, n, m, maxflow, ans;public static int[] d = new int[mx];public static int[] incf = new int[mx];public static int[] pre = new int[mx];public static int[] v = new int[mx];public static void init() {tot = 1; maxflow = 0; ans = 0;for(int i = 1; i <= n + 2; i++)head[i] = 0;}public static void add(int u, int v, int c, int val) {edge[++tot] = c; cost[tot] = val; ver[tot] = v;Next[tot] = head[u]; head[u] = tot;}public static void readin() throws IOException {n = Reader.nextInt(); m = Reader.nextInt();s = n + 1;t = n + 2;for(int i = 0; i < m; i++) {int u, v; char type;u = Reader.nextInt(); v = Reader.nextInt(); type = nextChar();
//          System.out.println(u + " " + v + " " + type + " ");switch(type) {case 'A':add(u, v, inf, E); add(v, u, 0, -E);add(u, t, 1, E); add(t, u, 0, -E);add(s, v, 1, 0); add(v, s, 0, 0);break;case 'B':add(u, t, 1, E); add(t, u, 0, -E);add(s, v, 1, 0); add(v, s, 0, 0);break;case 'C':add(u, v, inf, E); add(v, u, 0, -E);break;case 'D':add(u, v, 1, E); add(v, u, 0, -E);break;}}}static boolean spfa() {Queue<Integer> q = new LinkedList<Integer>();for(int i = 1; i <= n + 2; i++) {d[i] = inf;v[i] = 0;}q.add(s); d[s] = 0; v[s] = 1;incf[s] = 1 << 30;while(!q.isEmpty()) {int x = q.remove(); v[x] = 0;for(int i = head[x]; i != 0; i = Next[i]) {if(edge[i] == 0) continue;int y = ver[i];if(d[y] > d[x] + cost[i]) {d[y] = d[x] + cost[i];incf[y] = Math.min(incf[x], edge[i]);pre[y] = i;if(v[y] == 0) v[y] = 1;q.add(y);}}}if(d[t] == inf) return false;return true;}static void update() {int x = t;while(x != s) {int i = pre[x];edge[i] -= incf[t];edge[i ^ 1] += incf[t];x = ver[i ^ 1];}maxflow += incf[t];
//      System.out.println("d[t]" + d[t]);ans += d[t] * E;}static boolean leastfare() {while(spfa()) update();boolean can = true;for(int i = head[s]; i != 0; i = Next[i]) {if(edge[i] > 0) {
//              System.out.println("s ver:" + ver[i]);can = false;break;}}for(int i = head[t]; i != 0; i = Next[i]) {if(edge[i] <= 0) {
//              System.out.println("t ver:" + ver[i]);can = false;break;}}return can;}public static void main(String[] args) throws IOException {Reader.init(System.in);T = Reader.nextInt(); S = Reader.nextInt(); E = Reader.nextInt();while(T-- > 0) {init();readin();
//          for(int i = head[s]; i != 0; i = Next[i]) {//检查建图
//              System.out.println("s to " + ver[i]);
//          }if(leastfare())System.out.println(ans);else System.out.println("-1");}}}

CCF csp软件能力认证 第15次 第5题 管道清洁 java 100分相关推荐

  1. 【CSP】第20届CCF CSP计算机软件能力认证划水贴

    1.报考 1.考试时间 报名时间:2020年8月17日0时至2020年9月6日24时. 考试时间:2020年9月13日(周日)下午13:30-17:30. 其他:在9月13日13:00前到达准考证上标 ...

  2. 2022 CCF 非专业级别软件能力认证第一轮 (CSP-J1)入门级 C++语言试题 认证时间:2022 年 9 月 18 日 09:30~11:30

    今天的考试题,有点乱 2022 CCF 非专业级别软件能力认证第一轮 (CSP-J1)入门级 C++语言试题 认证时间:2022 年 9 月 18 日 09:30~11:30 考生注意事项:  试题 ...

  3. 2020 CCF非专业级别软件能力认证第一轮(LGR-10)洛谷模拟试题试卷

    2020 CCF非专业级别软件能力认证第一轮 (LGR-10)洛谷模拟试题试卷 认证时间:2020年10月8日09:30-11:30 一.单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正 ...

  4. 2020 CCF 非专业级别软件能力认证第一轮(CSP-S) 提高级 C++ 语言试题

    目录 一.选择题:每题 2 分,共 15 题, 30 分. 在每小题给出的四个选项中,只有一项是符合题目要求的. 二.阅读程序(程序输入不超过数组或字符串定义的范围:判断题正确填 3,错误填 7:除特 ...

  5. 2021 CCF 非专业级别软件能力认证第一轮(CSP-S1)提高级

    C++语言试题,认证时间:2021 年 9 月 19 日 09:30~11:30 考生注意事项: l 试题纸共有 16 页,答题纸共有 1 页,满分 100 分.请在答题纸上作答,写在试题纸上的 一律 ...

  6. 2020年CSP-J认证 CCF非专业级别软件能力认证第一轮真题--阅读程序题

    2020 CCF认证第一轮(CSP-J)真题 二.阅读程序题 (程序输入不超过数组或字符串定义的范围,判断题正确填√错误填X;除特殊说明外,判断题 1.5分,选择题3分,共计4 分) 第一题 01 # ...

  7. CCF软件能力认证201604俄罗斯方块

    试题编号: 201604-2 试题名称: 俄罗斯方块 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏. 游戏在一个1 ...

  8. 非专业级软件能力认证(CSP-J/S)

    目录 主办方:★★★★★ 中国计算机学会(CCF) 考试内容:★★★★★ C++,分为CSP-J和CSP-S分别有两轮认证. 第一阶段:基础知识,数据结构(入门),第二阶段:算法,上机操作(上机,编程 ...

  9. ##CSP认证 201909-2小明种苹果(续)(100分)

    #include<stdio.h> int D=0, E=0; int main() {void judge(int d[], int n);int n,i,j,m,T=0;int a[1 ...

最新文章

  1. uboot环境变量-带分号的环境变量
  2. 我现在是个普通Java程序员,如何才能“更有竞争力”?
  3. Java设计模式(工厂模式>抽象工厂模式和原型模式)
  4. zcmu-1934(卡特兰数大数取模(逆元))
  5. ROS安装并运行小乌龟
  6. java doc说明书_JAVADOC 常见使用方法 帮助文档
  7. 单片机移频防啸叫_基于ARM9的防啸叫音频放大器的设计
  8. 小程序入门学习04--数据绑定、条件渲染、列表渲染
  9. NBR100多IP出口解决方案的配置方法
  10. ICCV2013 录用论文(目标跟踪相关部分)
  11. shp文件根据属性导出若干单独shp
  12. 回答缺点?这样回答HR听完直呼大佬!
  13. 如何设置计算机自动连接宽带,Win7系统如何设置开机自动连接宽带?
  14. Milk Measurement
  15. 排污单位门禁、视频、参数监控联网数据采集传输仪
  16. python:命令行与环境
  17. 【Android】恢复出厂后静态壁纸加载流程
  18. 深度揭密:2015年微商怎么玩才赚钱?
  19. 对不起,我就是传说中的 10 倍工程师”
  20. 小红书数据【移动版】更新来了!

热门文章

  1. 设计模式:Facade模式
  2. 组件化开发和模块化开发
  3. Nginx 二级目录部署Vue2
  4. 华为登录认证配置学习笔记
  5. Scrapy爬取2-接口爬取
  6. python(dict字典相关知识以及小例子:生成一个列表,存放100个随机整数,找出出现次数最多的数字)
  7. 用Google看世界,妙用引擎“Index of”
  8. 天之炼狱之超狼,双狼,超级蝙蝠变法
  9. 太无聊了怎么办?从编译器控制台看会书吧
  10. 100.网络安全渗透测试—[常规漏洞挖掘与利用篇16]—[密码找回漏洞与测试]