給出乙個\(n\)*\(m\)的空矩陣,每次可以使任意一行/列\(+1/-1\),給出\(k\)個位置的最終結果,詢問是否存在解.
\(1<=n,m,k<=1000\)
考慮把每一行/列看成點,限制看成邊權,操作就是把與某個點相連的所有邊\(+1/-1\),詢問能否使邊權都變為\(0\).
我們顯然只需要考慮環上的情況,隨便設環上某個點的值為\(x\),其他點都可以表示成\(ax+b\)的形式,考慮最後的一條環邊是否滿足即可.
#include#includeusing namespace std;
const int maxn=2005;
int tot,lnk[maxn],nxt[2*maxn],son[2*maxn],w[2*maxn];
int t,n,m,k,pd,a[maxn],b[maxn];
bool vis[maxn];
void add(int x,int y,int z)
void dfs(int x)
}int main()
memset(vis,0,sizeof(vis));pd=1;
for (int i=1;i<=n;i++) if (!vis[i]) a[i]=1,dfs(i);
if (pd) printf("yes\n");else printf("no\n");
} return 0;
}
FJOI2018 領導集團問題
fjoi2018 領導集團問題 dp i j i為根子樹,最上面的值是j,選擇的最大值 觀察dp方程 1.整體dp已經可以做了。2.考慮優美一些的做法 dp i 如果對j取字尾最大值,顯然是不上公升的分段函式 而段數就是子樹sz 樹形dp的時候,子樹之間可以直接把分段函式按位相加。對於 w x 的,...
FJOI2018 領導集團問題
首先本題貪心不是很好做,可以考慮 dp 然後我們有了乙個很直接的想法,令 dp 表示以 i 號點為根當前選擇的節點中權值最小的權值為 j 的最大成員數,可以發現這樣做是 o n 3 的。可以發現這個 dp 有很多轉移是相同的,那麼我們這樣做是非常浪費的,為了能夠快速轉移,我們可以改變一下狀態,令 d...
FJOI2018 領導集團問題
給定帶點權樹,求最大的集合使得,集合內若兩點為祖孫關係,孫子權值 le 祖先權值 令 f 為 u 子樹內選擇 i 個點,最小值最大是多少,轉移顯然 考慮對每個點維護乙個可重集 s u 降序,第 i 個點為子樹內選擇 i 個點,最小值的最大可能值 合併兩個子樹 s s 直接合併集合即可 考慮將 u 加...