/*
*rainto96
*beijing university of posts and telecommunications school of software engineering
*題意:10000個節點的一顆樹
每個節點有個字母
給出目標字串
求是否存在點對u,v使得u到v的路徑上的字母正好組成這個字串
解法:就那麼搞,字首記一下,字尾記一下,然後查查缺的部分有沒有
查很有講究
如果用map存hash值的話,常數太大(自己寫的也過不了)很難過
其實可以用bool值存遍歷過的狀態,是這樣的,如果發現當前結點到根的字串恰好是某個字首或者某個字尾,則把那裡的開關開啟
查詢的話也是查對應的缺的部分開關有沒有開啟,於是就從帶常數的o(1)變為了樸素的o(1)
這裡有一些小細節要注意,多測幾組樣例就好了
*/#include #include #include #include #include #include #include #include #include #include #include using namespace std;
#define pb push_back
#define all(x) x.begin(),x.end()
#define vint vector#define pii pair#define mp(x,y) make_pair((x),(y))
#define ll long long
#define ull unsigned ll
#define mem0(x) memset(x,0,sizeof(x))
#define mem(x,val) memset((x),val,sizeof(x))
#define scan(x) scanf("%d",&(x))
#define scan2(x,y) scanf("%d%d",&(x),&(y))
#define scan3(x,y,z) scanf("%d%d%d",&(x),&(y),&(z))
#define scan4(x,y,z,k) scanf("%d%d%d%d",&(x),&(y),&(z),&(k))
#define max(a,b) a=max(a,b)
#define min(a,b) a=min(a,b)
using namespace std;
const int maxn = 10111;
int head[maxn];//
struct edgeed[maxn*2];
int n;
bool del[maxn];//
int wt[maxn];
int newroot;
int maxn=0x3f3f3f3f;
int dfs(int now,int fa,int all,int& newroot , int dep)
max(mx,all-wt[now]);
if(mx < maxn) maxn=mx ,newroot=now;
return wt[now];
}int searchit(int root,int all)
int ednum=0;//
bool found=false;//
int len;//
void init()
const ull magic = 33;
ull mi[maxn];//
char node[maxn] , s[maxn];//
ull hsv;
pairque[maxn*3];//
int tail;//
bool st1[maxn],st2[maxn];//suf , pre
ull pre[maxn],suf[maxn];
//setst1,st2;//
#define p(x) ((x)-'a'+1)
bool gao(int now,int fa,ull hs,ull ant,int len,int root)
for(int i = head[now];i!=-1;i=ed[i].nxt)
return false;
}pii sque[22111];
int shead=0,stail=0;
void solve(int rt,int sz)
solve(1 ,n );
if(found) puts("find");
else puts("impossible");
} return 0;
}
HDU 5242 GAME 2015上海邀請賽G題
題意 給定一顆以1號節點為根節點的有向樹,每個節點有乙個權值,問從1號節點出發k次,能到達的所有節點的和的最大值。思路 貪心的把樹的鏈按照權值和從大到小剖分成若干條鏈 過程可以根據上交書上的熟練剖分模版做細小改動 然後根據每條鏈的權值排序取最大的k個就是答案。include include incl...
hdu5047(上海網賽1006)Sawtooth
題意 乙個矩形畫布。在上面畫 m 問畫n個m,最多把畫布分為幾部分。思路 找規律,研究畫第二個m的時候,在第乙個的基礎上增加了多少區域。可以得出公式 16 n n 1 2 2 n 1。然後因為結果爆long long,高精度搞超時,所以砍半來計算。include include include in...
HDU 5045 狀壓DP 上海網賽
比賽的時候想的是把n個n個的題目進行狀壓 但這樣不能講究順序,當時精神面貌也不好,真是挫死了 其實此題的另乙個角度就是乙個n個數的排列,如果我對n個人進行狀壓,外面套乙個按題目循序漸進的大迴圈,那麼,在當前做第i個題目,前i 1個題目已經做完,然後做完的人的狀態為j,j可能是1110 1101 10...