liantong

模板方法模式

守給你的承諾、 提交于 2020-02-04 02:40:47
概念:实现一些操作时,整体步骤很固定,但是其中一小部分是变化的,这时候就可以使用模板方法模式,将容易变化的部分抽离出来,供子类实现。 应用场景:servlet 代码: //短信模板 public abstract class MsgTemplate { public void sendMsg(){ //1.开始日志报文 addHeadLog(); //2.调用不同的运营商发送短信 httpRequest(); //3.结束日志报文 addFootLog(); } public abstract void httpRequest(); private void addHeadLog() { System.out.println("调用运营商开始记录日志"); } private void addFootLog() { System.out.println("调用运营商结束记录日志"); } } public class YiDong extends MsgTemplate { @Override public void httpRequest() { System.out.println("yidong"); } } public class LianTong extends MsgTemplate{ @Override public void httpRequest() {

P3225 [HNOI2012]矿场搭建

混江龙づ霸主 提交于 2019-11-27 11:15:48
https://www.luogu.org/problemnew/show/P3225 用Tarjan跑出割点,然后DFS搜索所有的联通快 计算每一个联通快中的割点数目 分类讨论: 如果没有割点 至少需要建立两个出口 从任意非割点的地方选择两个点建立 如果这个分组只有一个割点 只需要在分组内设立一个出口 可以设立在任意一个非割点的地方 如果有两个及以上个割点,则无需建立,可以直接到达其他联通块 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 using namespace std; 6 inline int read(){ 7 int sum=0,x=1; 8 char ch=getchar(); 9 while(ch<'0'||ch>'9'){ 10 if(ch=='-') 11 x=0; 12 ch=getchar(); 13 } 14 while(ch>='0'&&ch<='9') 15 sum=(sum<<1)+(sum<<3)+(ch^48),ch=getchar(); 16 return x?sum:-sum; 17 } 18 inline void write(int x){ 19 if(x<0) 20 putchar('-'),x=-x; 21