字串變換
這題用string比較簡單,string有許多自帶函式和性質比較方便,如果用char的話比較麻煩,可是在做這道題的時候不知道這些,然後用char打了個超級麻煩的**
string支援兩個字串直接相加
s.insert(pos,s2)
s.substr(pos,len);
s.erase(pos,len);
s.replace(pos,len,s2);
s.find(s2,pos) 如果查詢不到返回string::nops
靶形數獨
這道題比較簡單,dfs引數代表搜到第幾個空位置,每一層dfs列舉9--1,然後搜到x==num+1是,ans取max
#include#include#include#include#includeusing namespace std;
int a[10][10],be[10][10],c[10][10];
bool lvis[10][10],hvis[10][10],vis[10][10];
struct node
t[88];
int num=0,ans;
int cmp(const node &a,const node &b)
}int main()
return 0;
}
傳染病控制
bfs按深度記錄節點,傳染病會隨著深度擴散,顯然每層深度的所有節點中只有乙個節點到他父親的邊會被切斷,
對於乙個節點如果他到他父親的邊被切斷,標記一下,然後搜到每一層的時候,先下傳標記,即
if(vis[fa[x]]==1)
vis[x]=1;
用這一層節點數-被標記的點數-1就是這一層會被感染的節點數
#include#include#include#include#include#define maxn 305
using namespace std;
int n,p;
int ans,maxdeep,op=0;
struct edge
b[maxn*2];
vector< int > v[maxn];
int k=0,head[maxn],fa[maxn],d[maxn],sz[maxn];
bool vis[maxn];
int cmp(const int &a,const int &b)
void dfs1(int x,int father,int deep)
maxdeep=max(maxdeep,deep);
}void add(int u,int v)
void read()
dfs1(1,0,0);
for(int i=1;i<=maxdeep;i++)
sort(v[i].begin(),v[i].end(),cmp);
}void dfs(int x)
if(v[x].empty()==1) return ;
int js=0;
for(int i=0;i
傳染病控制
參考部落格 本來有貪心的想法,但是好像不怎麼可以。貪心的想法可以很容易舉出反例 一棵子樹很大但是只有一根樹枝,那麼可以先切斷其他子樹的傳播,最後只需要一步就可以終止這棵子樹的傳播。由於題目裡n 300,估摸著暴力不會出事。否則wa 4 include include include define m...
Luogu P1041 傳染病控制 搜尋
p1041 傳染病控制 近來,一種新的傳染病肆虐全球。蓬萊國也發現了零星感染者,為防止該病在蓬萊國大範圍流行,該國 決定不惜一切代價控制傳染病的蔓延。不幸的是,由於人們尚未完全認識這種傳染病,難以準確判別病毒攜帶者,更沒有研製出疫苗以保護易感人群。於是,蓬萊國的疾病控制中心決定採取切斷傳播途徑的方法...
NOIP2003 傳染病控制 搜尋 剪枝
搜尋的最廣泛應用優化 剪枝 這道題的dp和貪心都是無正確性的,所以,搜 搜的時候你發現不剪枝極容易被卡掉 然而良心noip沒有這麼做,不剪枝仍然飛快 所以我們需要一些玄學的剪枝最常見的有倆 i.我們一層一層累加被感染人群若當前被感染人群已經大於已知解那麼就捨去。ii.之後的每一層如果都取最大仍不如已...