摘要:        
正反加边分别跑spfa最短路,把两次最短路的和求个max就是答案 cpp include include include include using namespace std; const int N=2005,M=200005; int n,m,s,x[M],y[M],z[M],h[N],cnt    阅读全文
posted @ 2018-04-27 22:01
lokiii
阅读(164)
评论(0)
推荐(0)
        
            
        
        
摘要:        
最长上升子序列。虽然数据可以直接n方但是另写了个nlogn的 转移:f[i]=max(f[j]+1)(a[j] include using namespace std; const int N=5005; int n,a[N],f[N],ans; int read() { int r=0,f=1;     阅读全文
posted @ 2018-04-27 21:26
lokiii
阅读(232)
评论(0)
推荐(0)
        
            
        
        
摘要:        
有趣 每条边在算答案的时候被算了二倍的边权值加上两个端点的权值,然后睡觉点额外加一次 所以可以用这个权做MST,然后加上点权最小的点 cpp include include include using namespace std; const int N=100005; int n,m,a[N],f    阅读全文
posted @ 2018-04-27 18:12
lokiii
阅读(170)
评论(0)
推荐(0)
        
            
        
        
摘要:        
先按照时间顺序加,价值塞进小根堆里,碰到不合法情况就从堆里减去    阅读全文
posted @ 2018-04-27 17:46
lokiii
阅读(169)
评论(0)
推荐(0)
        
            
        
        
摘要:        
模拟就行……讲道理这个时间复杂度为啥是对的??? cpp include include using namespace std; int k,n; int dfs(int v) { if(v    阅读全文
posted @ 2018-04-27 16:57
lokiii
阅读(155)
评论(0)
推荐(0)
        
            
        
        
摘要:        
好像是完全背包吧分不清了…… 好像是把数组二维压一维的时候,01背包倒序,完全背包正序 cpp include include using namespace std; const int N=105,H=55005; int n,h,p[N],c[N],f[H]; int main() { sca    阅读全文
posted @ 2018-04-27 16:29
lokiii
阅读(129)
评论(0)
推荐(0)
        
            
        
        
摘要:        
设f[i][j]为奶牛选取状态为i,最后一头选的为j,转移直接f[k][(1 include include using namespace std; int n,m,p[20],a[20]; long long f[20][1m) f[k][p[k]|i]+=f[j][i]; for(int i=    阅读全文
posted @ 2018-04-27 16:10
lokiii
阅读(108)
评论(0)
推荐(0)
        
            
        
        
摘要:        
如果反着看,看成合并木板,就和合并果子一样了,把若干块放进一个小根堆,然后每次取出两个合并,把合并结果加进答案和堆里 代码里小根堆用优先队列实现(懒    阅读全文
posted @ 2018-04-27 15:47
lokiii
阅读(150)
评论(0)
推荐(0)
        
            
        
        
摘要:        
t记录每个格子最早被砸的时间,bfs(x,y,t)表示当前状态为(x,y)格子,时间为t。因为bfs,所以先搜到的t一定小于后搜到的,所以一个格子搜一次就行 cpp include include include using namespace std; const int N=505,inf=1e    阅读全文
posted @ 2018-04-27 15:36
lokiii
阅读(135)
评论(0)
推荐(0)
        
            
        
        
摘要:        
先把已有的边并查集了,然后MST即可 记得开double cpp include include include include using namespace std; const int N=1005; int n,m,f[N],con,tot; double x[N],y[N],ans; st    阅读全文
posted @ 2018-04-27 14:37
lokiii
阅读(118)
评论(0)
推荐(0)
        
            
        
        
摘要:        
写了个bfs发现MLE了... 设f[t][i][j]为在t时刻走到(i,j)的方案数,转移和bfs一样 cpp include include using namespace std; const int N=105,dx[]={1, 1,0,0},dy[]={0,0, 1,1}; int n,m    阅读全文
posted @ 2018-04-27 14:06
lokiii
阅读(116)
评论(0)
推荐(0)
        
            
        
        
摘要:        
模拟    阅读全文
posted @ 2018-04-27 11:25
lokiii
阅读(156)
评论(0)
推荐(0)
        
            
        
        
摘要:        
……我为什么要写这种题解…… 枚举投掷情况即可    阅读全文
posted @ 2018-04-27 11:20
lokiii
阅读(140)
评论(0)
推荐(0)
        
            
        
        
摘要:        
一棵树,碰到改变转向的边就异或一下,从1dfs一遍 cpp include include using namespace std; const int N=1005; int n,h[N],cnt,v[N]; struct qwe { int ne,to,va; }e[N'9'||p='0'&&p    阅读全文
posted @ 2018-04-27 11:12
lokiii
阅读(117)
评论(0)
推荐(0)
        
            
        
        
摘要:        
从叶子往上先拓扑一下,建立虚拟root,从root开始dfs。注意到每个点的最优取值一定是一个区间(中位数区间),从儿子区间推出父亲区间即可 cpp include include include include using namespace std; const int N=500005; in    阅读全文
posted @ 2018-04-27 10:58
lokiii
阅读(183)
评论(0)
推荐(0)
        
 
                    
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号